Posted on 2009-06-18 14:38
小夜 閱讀(383)
評論(0) 編輯 收藏 引用 所屬分類:
[61] Linux 、
[04] 程序設(shè)計 、
[51] C&C++
進程間通信知識了解不少,今天第一次正式使用,就出問題了。
看看共享內(nèi)存的原理,操作系統(tǒng)把一塊公共的內(nèi)存區(qū)域,映射到進程內(nèi)存空間中,但映射的內(nèi)存地址并不能保證映射后的地址一致性(其實一致的可能性很小,基本沒有成功過),而此處array執(zhí)行的地址為創(chuàng)建共享內(nèi)存進程中正確的數(shù)組地址,在新的進程中就不對了。
因此在共享內(nèi)存中,需要慎重使用指針變量。對于本文中的問題修改很簡單,刪除int *array,每次使用結(jié)構(gòu)的地址跳過這些額外信息即可,可通過下面的宏函數(shù)得到數(shù)據(jù)域的指針。

文章來源:
http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169093.aspx