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("%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
在这种情况下将不起作用(尽管它打印出一个不错的格式)
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”