循环不归化期间C ++ 2D数组中断

时间:2015-12-01 00:09:15

标签: c++ arrays pointers matrix multidimensional-array

我正在写一个名为'Matrix'的对象。对于参数,用户指定要创建的行数和列数。构造函数通过以下方式在Main类中调用:

Matrix* matrix = new Matrix(2, 3);

构造函数在* .h文件中进行原型化,并在* .cpp文件中实现如下(为了便于说明,包含了私有变量):

double** arr;
int rows;
int cols;

Matrix::Matrix(int numRows, int numCols) {
    rows = numRows;
    cols = numCols;
    arr = new double*[numCols];
    for (int i = 0; i < numRows; ++i) {
        for (int x = 0; x < numCols; ++x) {
            arr[i][x] = 0;
        }
    }
}

当程序执行时(在Visual Studio中编译),它构建,执行并抛出类似于的异常:

Exception thrown at 0x00091BCC in Matrix Project.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD.

我只能假设这意味着我没有正确地循环数组,因为它在嵌套的arr[i][x] = 0循环中在行for处中断。

有人能给我一些关于为什么会破坏的提示吗?如何以不需要以数学方式操作一个长循环的方式声明数组?

提前谢谢!

[编辑]

Anton提供了我需要为每一行分配内存。将原始嵌套循环修改为以下内容时,程序已成功执行。谢谢!

for (int i = 0; i < numRows; ++i) {
    arr[i] = new double[cols];
    for (int x = 0; x < numCols; ++x) {
        arr[i][x] = 0;
    }
}

0 个答案:

没有答案