我写了两个函数 - 一个用于创建二维双数组,另一个用于删除它。
double** createMatrix(int n)
{
double **a = new double *[n];
for (int i=0; i < n; i++)
a[i] = new double[n];
return a;
}
void deleteMatrix(double** a, int n)
{
for (int i=0; i < n; i++)
delete [] a[i]; // ERROR HERE
delete []a;
}
分配的数组工作正常。但是当我尝试释放它时,我得到一个错误(在标记的行上):“project2.exe触发了一个断点。” 我正在使用Visual Studio 2012。
编辑: 我创建了一个完整的程序:
int main()
{
const int n = 10;
double **m = createMatrix(n);
deleteMatrix(m, n);
return 0;
}
它工作正常。另外,我发现了我的问题。这是copyMatrix
函数中的拼写错误。
for (int j=0; j <= n; j++) // should be < instead of <=
a[i][j] = originalMatrix[i][j];
非常感谢你的帮助!
答案 0 :(得分:1)
显而易见的解决方案是首先不使用数组。
如何制作n
x n
矩阵?
#include <iostream>
#include <vector>
using Row = std::vector<int>;
using Matrix = std::vector<Row>;
int main() {
size_t const n = 5;
Matrix matrix(Row(n), n);
}
简单吧?作为奖励,免费提供复制,移动和销毁。