1

我写了两个函数——一个创建二维双精度数组,另一个删除它。

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

非常感谢你的帮助!

4

1 回答 1

1

显而易见的解决方案是首先不使用数组。

如何创建一个nxn矩阵?

#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);
}

简单吧?作为奖励,免费提供复制、移动和破坏。

于 2013-04-04T07:17:55.183 回答