0

いくつかの行列を操作していくつかの固有値を見つける必要がある量子メカの問題を解決しています。この問題の詳細は関係ありません。C ++の問題について助けが必要なだけです。私はこの言語に不慣れで、数時間後、自分で解決しようとしても無駄だと判断したので、あなたに助けを求めます.

プログラムの最後で glibc がエラーを検出し、適切に割り当てを解除できないという問題があります。ここにコピーペーストするには大きすぎるため、実際にエラーが発生する部分を複製します。

void hamiltonian(int, double **&);

int i,j;

int main()
{
int N = 1000; double **A;

hamiltonian(N, A);

//Physics here
.
.
.
.
.
//Delete
for(i=0; i<N; i++){delete []A[i];}
delete []A;

return 0;
}

void hamiltonian(int N, double **&A)
{
A = new double *[N];
for(i=0; i<N; i++)
{
A[i] = new double[N];
for(j=0; j<N; j++)
{
if(i==j)A[i][j] = 2;
if(i==j+1 || i==j-1){A[i][j] = 1;}
}
}
}

私の教授によると、割り当てと同じ関数で割り当てを解除する必要がありますが、プロジェクトがほぼ完了した後、割り当て解除について考えさえしなかったため、多くのコードを書き直さなければなりません。問題は、A の割り当てを解除できないことです。他の関数 (//Physics 内) で必要なため、ハミルトニアン関数内。

確かにこれを回避する方法があるはずですか?私には少し無知に聞こえるかもしれませんが、割り当てと同じ関数で割り当てを解除する必要がある場合、これは効率の悪い設計のように思えます。

4

3 に答える 3