gdb - 如何查看指针数组的内容?

时间:2017-09-19 00:08:03

标签: c++ c arrays debugging gdb

我在获取变量' arr'的内容方面遇到了问题。这是一个指针数组。 我尝试了p *arr@n,但它提供了以下输出:$1 = {0x603010, 0x603030}。 我该怎么办?

int n, q;
scanf("%d %d", &n, &q);

int lastAnswer=0, index_size[n], *arr[n];  // <-- here
for(int i=0; i<n; i++)
    index_size[i] = 0;

for(int i=0; i<n; i++) {

    int *temp = malloc(sizeof(int)*n);
    arr[i] = temp;
}

while(q--) {
    int w, x, y, seq;
    scanf("%d %d %d", &w, &x, &y);

    if(w == 1) {

        seq = ((x ^ lastAnswer) % n);
        arr[seq][index_size[seq]++] = y;
    }
    else {

        seq = ((x ^ lastAnswer) % n);
        lastAnswer = y%n;
        printf("%d\n", lastAnswer);
    }
}

return 0;

1 个答案:

答案 0 :(得分:1)

如果您打印出一个指针本身,它只会在您的内存块中为您提供一个地址。

所以print *arr@n只会给你第一个维度的内容(输出中的地址数组)

如果您想打印更深层次的内容。你可能想做这样的事情:

print **arr@n;

print *arr[0]@n

另一种方法是在程序中定义一个漂亮的打印函数,并在gdb中调用它。

void print(int arr[][], n, m)
{
    int i, j;
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < m; ++j)
            printf("%d ", arr[i][j]);
        printf("\n");
    }
}

通过

在gdb中调用它
call print(arr, n, m)

我不认为gdb支持打印2D阵列本身,为什么? 由于print *array@3的定义不打印array中的前三个元素,而是{&#34;引用*array(或array[0])和array[0]之后的三个元素。

print **arr@n@n

在这种情况下不起作用(虽然它打印出一个很好的格式)