【问题标题】:view multi-dimensional array values debugging in Visual C++在 Visual C++ 中查看多维数组值调试
【发布时间】:2009-12-30 18:27:44
【问题描述】:

我正在尝试调试一些 C++ 代码,但在调试时看不到多维数组中的值

我有一个动态分配的指针(双 **A)。

当我尝试查看这个数组的值时,我只得到第一个值,我看不到其余的值。

有什么想法吗?

TIA

【问题讨论】:

  • 这真的是多维数组还是数组数组?
  • 它是一个数组数组。不知道有什么区别

标签: arrays debugging visual-c++


【解决方案1】:

在 VS 中查看大型数据数组的最简单方法是使用内存窗口而不是 Watch 窗口或 Autos 或 Locals 窗口。只需将指针值拖到内存窗口的地址框即可。

【讨论】:

  • 这个其实解决了问题,不知道为什么没有选为答案...
【解决方案2】:

如果您使用的是 Visual Studio,请将 array[X],Y 放在观察窗口中,其中 X 是行号,Y 是行数 - 这将允许您在观察窗口中观察整行。

例如,将这些行放到监视窗口中:

array[0],7
array[1],7
array[2],7
...

【讨论】:

    【解决方案3】:

    遍历并打印出每个值。大致是这样的:

    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;
        }
    }
    

    【讨论】:

      【解决方案4】:

      通过调试器,您可以在监视窗口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 的建议将值打印到屏幕上。

      【讨论】:

      • 那行不通。我只得到第一行的值,所以 A[0][0] = A[1][0]=A[2][0] 等等。数组是: 2 1 1 1 2 1 1 1 2 所以这显然是错误的。我开始质疑我不为此使用 C# 的决定。
      • 这很奇怪。我认为您应该发布创建和填充数组的整个代码。
      • 你去吧:双**A;双米; A = 新双 *[M]; //定义M乘M矩阵 for( int k =0; k
      • 我的问题是我没有得到我应该得到的,而是得到 A[0][0]=A[1][0] =2 ; A[0][1]=A[1][1] = 1 以此类推。事实上,我只是逐步观察 A 的所有值,同时分配值 w 和 A[1][0] 与 A[0][0] 同时分配。这让我发疯。帮助!!!! :)
      • 尝试完全运行我发布的代码。这是完整的程序;在新的空项目中运行它。它工作正常吗?
      【解决方案5】:

      这是我得到的:http://www.flickr.com/photos/42475383@N03/4247049191/

      编辑。

      我使用的是 CLR 控制台项目。我尝试了一个win32控制台,它工作正常。我可以看到一个谷歌时刻来了解 CLR 项目是什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多