【发布时间】:2009-12-30 18:27:44
【问题描述】:
我正在尝试调试一些 C++ 代码,但在调试时看不到多维数组中的值
我有一个动态分配的指针(双 **A)。
当我尝试查看这个数组的值时,我只得到第一个值,我看不到其余的值。
有什么想法吗?
TIA
【问题讨论】:
-
这真的是多维数组还是数组数组?
-
它是一个数组数组。不知道有什么区别
标签: arrays debugging visual-c++
我正在尝试调试一些 C++ 代码,但在调试时看不到多维数组中的值
我有一个动态分配的指针(双 **A)。
当我尝试查看这个数组的值时,我只得到第一个值,我看不到其余的值。
有什么想法吗?
TIA
【问题讨论】:
标签: arrays debugging visual-c++
在 VS 中查看大型数据数组的最简单方法是使用内存窗口而不是 Watch 窗口或 Autos 或 Locals 窗口。只需将指针值拖到内存窗口的地址框即可。
【讨论】:
如果您使用的是 Visual Studio,请将 array[X],Y 放在观察窗口中,其中 X 是行号,Y 是行数 - 这将允许您在观察窗口中观察整行。
例如,将这些行放到监视窗口中:
array[0],7
array[1],7
array[2],7
...
【讨论】:
遍历并打印出每个值。大致是这样的:
void print2DArray(double **A, int width, int height) {
for (int i=0; i<width; i++) {
for (int j=0; j<height; j++) {
cout<<A[i][j]<<" ";
}
cout<<endl;
}
}
【讨论】:
通过调试器,您可以在监视窗口A[2][1] 等中显式编写。
已编辑 - 呈现代码后:
int main() {
double **A;
double M = 4;
A = new double *[M]; //define M by M matrix
for( int k =0; k < M; k++) {
A[k] = new double [M];
}
//assign values to matrix
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
if ( j == i) {
A[i][j] = 2;
} else {
A[i][j] = 1;
}
}
}
return 0;
}
我在return 0 上放了断点,并在监视窗口中添加了一些测试值:
A[0][0] 2.0000000000000000 double
A[0][1] 1.0000000000000000 double
A[0][2] 1.0000000000000000 double
A[1][0] 1.0000000000000000 double
A[1][1] 2.0000000000000000 double
A[1][2] 1.0000000000000000 double
看起来不错。当你做同样的事情时你会得到什么?哪里有问题? 您还可以按照 MatrixFrog 的建议将值打印到屏幕上。
【讨论】:
这是我得到的:http://www.flickr.com/photos/42475383@N03/4247049191/
编辑。
我使用的是 CLR 控制台项目。我尝试了一个win32控制台,它工作正常。我可以看到一个谷歌时刻来了解 CLR 项目是什么。
【讨论】: