当我将数组传递给函数时,GDB不再显示值列表,只显示内存地址。我仍然可以迭代数组,但我还没有找到一种方法来取消引用它以返回列表。我该怎么做?
void dostuff(int foo[8], int size_of_foo) {
int i = 0;
i++;
}
int main() {
int foo[8] = {6, 0, 9, 4, 6, 8, 3, 4};
dostuff(foo, sizeof(foo));
}
GDB说(主要的第一个断点,dostuff的第二个断点):
调试器名称和版本:GNU gdb(GDB)7.6.1-ubuntu
at / home / lash / programming / workspace / Codeblocks Tests / main.cpp:19
p foo
$ 1 = {6,0,9,4,6,8,3,4}
继续......在/ home / lash / programming / workspace / Codeblocks Tests / main.cpp:14
p foo
$ 2 =(int *)0x7fffffffe590
p * foo
$ 3 = 6
我正在使用gcc版本4.8.1(Ubuntu / Linaro 4.8.1-10ubuntu9)。谢谢!
答案 0 :(得分:4)
一旦传递给函数,所有数组都会衰减到指向第一个元素的指针。在使用指针时,您仍然可以使用数组索引语法。
另请注意,在数组上使用sizeof
可以得到数组的字节数,而不是数组中元素的数量。
答案 1 :(得分:0)
您可以使用
取消引用数组元素p ((int*)0x7fffffffe590)[5]
e.g。打印第6个元素。