为什么0x0指向有效数据

时间:2014-01-31 01:35:36

标签: c

在使用GDB调试崩溃时,我发现程序在ASSERT()中崩溃了。奇怪的是指针包含0x0,指向有效数据。

示例代码:

#define MAX_NUM 10;
...
...
assert(x->y != NULL);
assert(x->y->z < MAX_NUM);  <-- Crashes here

我可以看到'x'指向有效地址。当我这样做时:

(gdb) print x
$16 = 0x841eda3
(gdb) print x->y
$17 = 0x0
(gdb) print *x->y
$18 = {
       ...
       ...
       z = 1;
       ...
}

这怎么可能?我不应该从GDB获得“无法访问地址0x0处的内存”错误吗?

1 个答案:

答案 0 :(得分:0)

什么版本的GDB?

核心转储并不总是说实话。它们可以通过多种方式搞砸。我有核心转储看起来有效,但没有。我觉得你很幸运,看起来很正常。