我正在写一个名为'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;
}
}