0
在使用GDB调试崩溃时,我发现程序在ASSERT()中崩溃。奇怪的是,指针包含0x0指向有效数据。为什么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的内存”错误吗?
这是数据,但您确定它是有效的数据吗? – John3136
是的,'y'的所有字段看起来都很健全。 – adizone
@aditya:当你打印*(x-> y)时会发生什么 - 它是否给你比'print * x-> y'和'print(* x) - > y'不同的结果? – Brendan