私の問題を説明するために、ソースを最小化します。
#include <iostream>
class vec{
public:
float* X;
int DIM;
vec(int dimension)
{
DIM = dimension;
X = new float[dimension];
for (int i=0;i<DIM;i++)
X[i] = (float) rand()/RAND_MAX;
}
~vec(void){
delete [] X;
}
vec operator-( vec const& rhs )
{
vec ans(DIM);
for (int i=0;i<DIM;i++)
ans.X[i] = X[i] - rhs.X[i];
return ans;
}
};
int main(){
vec A(5),B(5),C(5);
C= A-B;
return 0;
}
このプログラムを実行すると、ヒープが破棄されたというエラーが表示されます。デストラクタが私の問題であると確信しています。C= A-B;
変数のある行ではans
、コンストラクターによって破棄され、返すことができません。そうですか?行を削除すると、delete [] X;
すべて問題ありません。しかし、それはメモリを解放しません。
私は宿題をして、この問題について最も有名な検索エンジンの 1 つに相談しましたが、答えが見つかりませんでした。どうすれば修正できますか?