从gdb调试消息:
(gdb) p head_->next
$43 = { 0x0 }
(gdb) p (void *)head_->next
$44 = (void *) 0x603014
(gdb) p / head_->next
$45 = { 0x0 }
请参阅以下屏幕截图:
head _-> next是一个声明为的成员变量:
int *next[3];
起初,我认为头_->接下来是一个指针。但实际上并非如此。现在我很困惑," {0x0}"在gdb中意味着什么?
答案 0 :(得分:0)
head _-> next是一个声明为的成员变量:
int *next[3];
不,不是。至少不在那个文件中。如果它被宣布为那样,你会看到:
(gdb) p head_->next
$1 = {0x0, 0x0, 0x0}
证明:
cat t.c
#include <stdlib.h>
struct Foo {
int *next[3];
};
int main()
{
struct Foo *head = calloc(1, sizeof(struct Foo));
return 0;
}
gcc -g t.c && gdb -q ./a.out
(gdb) start
(gdb) next
(gdb) p head->next
gdb中“{0x0}”是什么意思?
这意味着GDB认为正在打印的实体是一个包含1个元素的数组。
如果要检查该数组中的3个元素,可以执行以下操作:
(gdb) p head_->next[0]@3