何が間違っているのかわからない。
Huge& Huge::operator *=(const Huge& h) {
Huge retHuge = *this * h;
string out1 = retHuge.toString(); // for debugging purposes
return *this = retHuge;
// return retHuge;
}
The
Huge retHuge = *this * h;
文字列で確認すると正常に動作しますout1
。retHugeを返し、呼び出し元のルーチンに結果を出力すると、元のこれが変更されていないことがわかります。を実行し*this = retHuge
て戻る*this
と、SEGSEGV
障害が発生します。
デストラクタを呼び出してメモリをクリーンアップし、乗算後に結果を返す適切な方法は何ですか?
回答ありがとうございました。クレイジーエディは私が持っていたものを使用してそれを拡張しました。それはまさに私がやりたかったことです。彼の提案を反映するようにソースを変更すると、SEGSEGV障害が発生します。
これは、構文が基本的に正しい必要があるが、コードの残りの部分にバグが隠されていることを意味します。これは貴重な情報であり、私は戻って、何かを見つけることができるかどうかを非常に注意深く調べる必要があります。宿題をきちんとやる前に、怠けて助けを求めたくないので、まずはよく見ていきます。
私の経験は主に、参照されていないオブジェクト用の優れたガベージコレクターを備えたJavaです。デバッガーを調べて、メモリを解放するためにデストラクタが呼び出されていることを確認します。
これは、最初に* =演算子を実行してから、それから=演算子を作成するための良いヒントでした。明らかに私は反対の方向に物事をしました。それでもあなたの答えは、私がしたことは確かにうまくいくはずだということを示しているようです。動作しないので、戻って何か見つけられるか確認します。宿題を済ませても何も見つからない場合は、引き続き質問します。それまでの間、すべての助けに感謝します。