【问题标题】:Dyanamic 2d array in C++ using double pointerC++中使用双指针的动态二维数组
【发布时间】:2014-03-06 05:36:21
【问题描述】:

我有以下代码,我确保我按照Pointer-to-pointer dynamic two-dimensional array 中的说明做了所有事情

我需要我的二维矩阵是动态的,即用户需要输入尺寸。但是在接受用户输入时,我的 cin 出现错误。以下代码有什么问题?

int numberOfRows, numberOfColumn;
cout << "Please enter the number of rows: ";
cin >> numberOfRows;
cout << endl << "Please enter the number of columns ";
cin >> numberOfColumn;


int** matrix= new int*[numberOfRows];

for (int i=0; i<numberOfRows; i++)
{
    matrix[numberOfRows]= new int[numberOfColumn];
}

for (int i=0; i<numberOfRows; i++)
{
    for(int j=0; j<numberOfColumn; j++)
    {
        cout << "Please enter Row " << (i+1) << " Column "<< (j+1) <<" element: ";
        cin>> matrix[i][j];
        cout << endl;
    }
}

for (int i=0; i<numberOfRows; i++)
{

    for(int j=0; j<numberOfColumn; j++)
    {
        cout << matrix[i][j];
    }
}

【问题讨论】:

    标签: c++ pointers matrix pointer-to-pointer


    【解决方案1】:

    你有这个:

      for (int i=0; i<numberOfRows; i++)
      {
          matrix[numberOfRows]= new int[numberOfColumn];
      }
    

    应该是:

      for (int i=0; i<numberOfRows; i++)
      {
          matrix[i]= new int[numberOfColumn];
      }
    

    注意matrix[numberOfRows] 更改为matrix[i]

    【讨论】:

    • 当你遇到困难时,让另一双眼睛盯着某事总是有帮助的。我很高兴能帮上忙。
    【解决方案2】:

    在for循环中分配内存时

    matrix[i]= new int[numberOfColumn]; 
         instead of matrix[numberOfRows]= new int[numberOfColumn];
    

    注意:你还需要释放分配的内存

    更正的代码

    http://ideone.com/ILw1qa

    【讨论】:

    • 是的,我将释放分配的内存。我不敢相信我只是犯了一个糟糕的错误。非常感谢,我从来没有见过。
    • 要释放分配的内存,我只是删除 [] 矩阵还是需要执行循环并删除矩阵指向的非常 int* 然后删除矩阵本身?
    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多