2012-01-13 111 views
0

我正在使用共享內存來存儲使用shmget函數的一些數據。然後我使用shmat附加它並保存數據。下次我附加它時,程序崩潰。這條線有什麼可能性:C++崩潰中的共享內存

if((smemPtr = (int*)shmat(sMemId,NULL,0)) != (int *) -1) 

崩潰?我需要知道這條線路崩潰的情況。 sMemId有一個值。

+2

爲什麼不建立一個調試版本,並在gdb中查看它? – Nim 2012-01-13 09:19:39

+0

你確定它是導致崩潰的那條線嗎? – nos 2012-01-13 09:25:23

+0

@elmo的shmat()返回(無效*) - 1時失敗,是因爲其結果的被強制轉換爲int *這裏種是有道理的。我不相信它實際上會返回相同的價值 - 當然不是在所有平臺上。 – 2012-01-13 09:29:32

回答

0
(int*) (...) != (int *) -1 

指向另一個對象的指針是無符號值。在這段代碼中,我看到C型鑄造簽名(負)值爲無符號。結果取決於編譯器,平臺以及一般情況 - 未定義。