这是动态分配的2d数组的正确实现吗?

时间:2015-02-25 05:46:05

标签: c++ multidimensional-array

所以我的任务是以下问题。我不确定这是否是实现此目的的合适方式。

编写init2DArray()的实现,以便为numRows分配内存,然后为numCols分配内存,并为每个单元分配值。 另外,打印出错误声明(如果适用)。

给出了类声明。

#include <iostream>

class TwoDArray{
public:
    TwoDArray(){m_TwoDArray = NULL;};
    void init2DArray(int numRows, int numCols, int value);
private:
    int** m_TwoDArray;

};

这是我的实施

void TwoDArray::init2DArray(int numRows, int numCols, int value){
    m_TwoDArray = new int* [numRows];
    if(! m_TwoDArray)
        std::cout << "Error" << std::endl;
    for(int i = 0; i < numRows; i++){
        m_TwoDArray[i] = new int [numCols];
    }
    for(int i = 0; i < numRows; i++){
        for(int j = 0; j < numCols; j++){
            m_TwoDArray[numRows][numCols] = value;
        }
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

m_TwoDArray[numRows][numCols] = value;

不对。您最终会越过边界访问数组,这将导致未定义的行为。这需要改为:

m_TwoDArray[i][j] = value;