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

gdb - how to view contents of an array of pointer?

本文关键字:数组 指针 何查看 GDB-      更新时间:2023-10-16

我在获取变量'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("%dn", lastAnswer);
    }
}
return 0;

如果您打印了指针本身,它只会在内存块中给您一个地址。

因此,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");
    }
}

并将其称为

call print(arr, n, m)

我不认为GDB支持印刷2D阵列本身,为什么?因为print *array@3的定义不是在array中打印前三个元素,所以它是" priting *array(或 array[0]),以及array[0]之后的三个元素。

print **arr@n@n

在这种情况下将不起作用(尽管它打印出一个不错的格式)