传递给函数后的GDB打印数组只打印第一个值,但数组仍然完好无损

时间:2014-11-30 10:18:30

标签: c++ arrays gdb

当我将数组传递给函数时,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)。谢谢!

2 个答案:

答案 0 :(得分:4)

一旦传递给函数,所有数组都会衰减到指向第一个元素的指针。在使用指针时,您仍然可以使用数组索引语法。

另请注意,在数组上使用sizeof可以得到数组的字节数,而不是数组中元素的数量。

答案 1 :(得分:0)

您可以使用

取消引用数组元素
p ((int*)0x7fffffffe590)[5]

e.g。打印第6个元素。