【发布时间】:2014-01-31 01:35:36
【问题描述】:
在使用 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 的内存”错误吗?
【问题讨论】:
-
是数据,你确定是有效数据吗?
-
是的,'y' 的所有字段看起来都很正常。
-
@aditya:当你
print *(x->y)时会发生什么 - 它给你的结果是否与print *x->y和print (*x)->y不同? -
@Brendan
print *(x->y)给出与print *x->y相同的结果。print (*x)->y打印0x0
标签: c