在使用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处的内存”错误吗?
答案 0 :(得分:0)
什么版本的GDB?
核心转储并不总是说实话。它们可以通过多种方式搞砸。我有核心转储看起来有效,但没有。我觉得你很幸运,看起来很正常。