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