簡體   English   中英

gdb-如何查看指針數組的內容?

[英]gdb - how to view contents of an array of pointer?

我在獲取變量'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;

如果您自己打印出一個指針,它只會在您的內存塊中提供一個地址。

因此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 ,相反,它是“priting *array (或array[0]和以下三個元件array[0]

print **arr@n@n

在這種情況下將不起作用,(盡管它會打印出不錯的格式)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM