私は64ビットLinux centos 5.7でansi Cにコンパイルしてgcc4.4.4とgdbを使用しています。なぜ私のコードがPDF == NULLの真偽をテストしてexit(2)を呼び出すのか不明です。無料-mを使用してCプログラムのmalloc代入がNULLを返す理由は?
void func(...)
...
double *PDF;
...
PDF = malloc(sizeof(double) * 1);
if (PDF == NULL) {
exit(2);
}
プログラムが始まる前に、私が守っ:
total used free shared buffers cached
Mem: 2001 1955 46 0 71 975
-/+ buffers/cache: 907 1094
Swap: 4008 688 3319
、プログラムが終了(2)の上に座っているとき。コードの行は、無料-mは、読み取ります。どちらの場合も
total used free shared buffers cached
Mem: 2001 1970 31 0 72 976
-/+ buffers/cache: 921 1080
Swap: 4008 688 3319
、キャッシュ行で使用可能なメモリをたっぷり、(1バイトのための確かに十分な)自由の列があります。
その他の理由として、PDFがNULLになる可能性はありますか?これを引き起こす可能性のあるコード・バグは何ですか?
私は先週、gdbをたくさん使っていましたが、プログラムを終了する代わりに "q"と "y"を使用して終了しました(すべてのmallocメモリが終了するとfree()コードを実行する必要はありません)。
問題を再現する[SSCCE](http://sscce.org)のサンプル( 'main()'、includes、およびgccフラグ)を見ることはできますか? – pilcrow