私はまだC++を学んでおり、明白かもしれない質問がある、あるいは私が何をしようとしているのか分からないかもしれません。私は行列(適切に記述されたデストラクタを持つクラス)を取り、それから新しい行列を作成し、新しい行列への参照を返す関数を持っています。私はこれらの行列上でおそらく何千回も繰り返す必要があるので、私はメモリリークがないことを確認する必要があります。ですから、次のスペースを確保するためにはもう必要ない行列を適切に削除するにはどうしたらいいですか?ここで私は漏れのない取得しようとしているコードです。C++ delete reference
DynamicMatrix<double> x0 = getX0(n);
DynamicMatrix<double>exactU = getExactU(n);
DynamicMatrix<double> b = getB(n) * w;
DynamicMatrix<double> x1 = getX1(x0, b, w, n);
while(!isConverged(exactU,x1,e)){
delete x0; //<<<<< This doesn't work. Nor does delete &x0.
x0 = x1;
x1 = getX1(x0, b, w, n);
}
のgetX()の各メソッドは、行列へのポインタを作成し、getX0(のように行列への参照を返します):
DynamicMatrix<double> &getX0(int n){
DynamicMatrix<double>* mat1 = new DynamicMatrix<double>(n * n,1);
for (int i = 1 ; i <= n; i++){
for (int j = 1; j <= n; j++){
mat1->set((i-1)*n +j, 1, 0);
}
}
return *mat1;
}
それで、ポインタを必要とするので、 'delete X0'エラーを呼び出します。 '& X0'を削除すると、解放されたポインタが割り当てられていないと表示されます。これを行う正しい方法は何ですか?それとも、何か完全に間違っているのですか?大きすぎる行列と反復回数が多すぎると、私の大きなハードドライブに空きがなくなり、メモリリークが多かったと思います。 getX()
がポインタを返す場合
メモリリークによるハードドライブの空き容量が不足している場合は、ページングファイルが大きくなりすぎるように設定されていることを意味します。 –