1

2 つの関数を作成しました。1 つは 2 次元 double 配列を作成するためのもので、もう 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 に答える