我在64位Linux centos 5.7上使用gcc4.4.4和gdb,编译成ansi C.我不确定为什么我的代码在下面的PDF == NULL中测试为真,并调用exit(2)。
void func(...)
...
double *PDF;
...
PDF = malloc( sizeof(double) * 1 );
if (PDF == NULL) {
exit(2);
}
使用free -m,我在程序开始之前观察:
total used free shared buffers cached
Mem: 2001 1955 46 0 71 975
-/+ buffers/cache: 907 1094
Swap: 4008 688 3319
当程序坐在出口(2)上时;代码行,free -m读取:
total used free shared buffers cached
Mem: 2001 1970 31 0 72 976
-/+ buffers/cache: 921 1080
Swap: 4008 688 3319
在这两种情况下,缓存行中都有大量可用内存,空闲列(当然足够一个字节)。
PDF会变为NULL的其他可能原因是什么?什么编码错误可能会导致这种情况?
如果重要的话,我在上周一直在使用gdb,使用“q”然后“y”退出程序而不是让它完成(计算所有malloc内存将被程序终止因此释放不需要执行free()代码。)