2012-01-13 24 views
0

shmget関数を使用して一部のデータを格納するために共有メモリを使用しています。次に、それを添付してデータを保存するのにshmatを使用します。次回に接続すると、プログラムがクラッシュします。この行にはどのような可能性がありますか:C++クラッシュの共有メモリ

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

クラッシュ?私は、この行がクラッシュするシナリオを知る必要があります。 sMemIdには値があります。

+2

なぜデバッグビルドをビルドしてgdbで調べてみませんか? – Nim

+0

クラッシュの原因となっているのは本当ですか? – nos

+0

@elmo shmat()は失敗したときに(void *) - 1を返します。そのため、結果がint *にキャストされているので意味があります。私はそれが実際に同じ価値を返すと確信していません - 確かにすべてのプラットフォームではありません。 –

答えて

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

別のオブジェクトへのポインタは符号なしの値です。このコードでは、Cスタイルのキャスト(符号付き(負))値を符号なしにキャストしています。結果はコンパイラ、プラットフォーム、および一般的な場合に依存します - 未定義です。

関連する問題