如何删除二维双数组

时间:2013-04-03 14:45:59

标签: c++ pointers double new-operator

我写了两个函数 - 一个用于创建二维双数组,另一个用于删除它。

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];

非常感谢你的帮助!

1 个答案:

答案 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);
}

简单吧?作为奖励,免费提供复制,移动和销毁。