【发布时间】:2011-12-07 17:25:36
【问题描述】:
我在 64 位 Linux centos 5.7 上使用 gcc4.4.4 和 gdb,编译为 ansi C。我不确定为什么我的代码在下面的 PDF == NULL 测试为 true,并调用 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() 代码)。
【问题讨论】:
-
我们能否看到重现该问题的SSCCE 示例(
main()、包含和 gcc 标志)?
标签: c