gdb - 如何查看指针数组的内容?
Posted
技术标签:
【中文标题】gdb - 如何查看指针数组的内容?【英文标题】:gdb - how to view contents of an array of pointer? 【发布时间】:2017-09-19 00:08:02 【问题描述】:我在获取变量“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;
【问题讨论】:
也许写一个漂亮的打印机?您可以为指针类型注册一个... ***.com/questions/14502236/… 【参考方案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
中的前三个元素,而是“打印*array
(或array[0]
)和array[0]
后面的三个元素。
print **arr@n@n
在这种情况下不起作用,(尽管它打印出很好的格式)
【讨论】:
以上是关于gdb - 如何查看指针数组的内容?的主要内容,如果未能解决你的问题,请参考以下文章
对于C或C++语言,VS下调试如何查看指针数组的所指向的内容?谢谢指导.
返回一个指向 char 数组的指针。如何打印出数组的全部内容?
C1数据类型,常量变量,输入输出,运算符,if/switch/循环,/数组,指针,/结构体,文件操作,/编译预处理,gdb,makefile,线程