我正在 Visual Studio 2010 中调试我的 c++ 代码,并希望查看我的数组的内容,比如 Q,它是 17x17。当我插入断点并尝试调试时,我只看到变量“Q”。当我将它带到“Watch”屏幕并将其重命名为“Q,17”时,我看到了一层。
但我也想看看另一个维度。我不能写“Q,17,17”。什么是正确的命令?
谢谢...
我正在 Visual Studio 2010 中调试我的 c++ 代码,并希望查看我的数组的内容,比如 Q,它是 17x17。当我插入断点并尝试调试时,我只看到变量“Q”。当我将它带到“Watch”屏幕并将其重命名为“Q,17”时,我看到了一层。
但我也想看看另一个维度。我不能写“Q,17,17”。什么是正确的命令?
谢谢...
你不能,至少不能直接。
您可以做的是放入&array[0][0]
内存窗口,然后调整它的大小,使列数与一行array
数据匹配。
或者,您可以放入array[0],17
监视窗口,然后重复它array[1],17
,等等。
也许不是您要寻找的答案,而是监视窗口虽然功能强大,但无法满足您的要求。
如果您想以更图形化的方式查看以 2D 组织的值,您可以尝试使用Array Visualizer 扩展。它适用于小型多维数组。
它是一个免费的开源扩展,可以通过 MarketPlace 下载。它旨在在调试应用程序时显示数组。Visual Studio 2010、2012、2013和 2015有多个版本,不幸的是它似乎没有更新到 2017。
将数组 Q 放到全局范围内,您可以看到它的所有元素(如果它是本地数组,您可以复制到全局数组并在全局数组上操作):
int Q[17][17];
int main(){
int x=1, y=1, z;
}
调试好,算法验证好之后,就可以随意使用本地数组了
提出的解决方案仅适用于一维数组。但是每行具有固定大小的二维数组(在数学中将第一个维度视为一行)可以分配为一维数组,如下所示:
int ** a = new int * [n];
int * b = new int [n*n];
a[0] = &b[0];
for (int i=1; i<n; i++)
{
a[i] = a[i-1]+n;
}
int count=0;
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
a[i][j]= rgen.randInt(-10,10);
}
}
然后,您可以在代码中用作矩阵,并使用假设您的矩阵是 10 x 10 来a
可视化。b,100
可以直接查看静态分配的全局内存或局部变量
我没有找到在 VS2010 中查看动态分配的二维数组的方法(只有一维)。VS2019可以,通过
double ** a;
a = (double**)malloc(5 * sizeof(double*));
a[0]=(double*)malloc(10 * sizeof(double));
...
(double(*)[10]) a[0],5
(在观察窗口中添加)
而这里的这个也可以
(double(**)[10])a,5