[英]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.