0

ランタイムエラーが発生します

malloc: *** error for object 0x10070c5c0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

次のスタックトレースを使用します。

ここに画像の説明を入力してください

これは、デストラクタ~Clusteringで問題が発生していることを示しています~NodeMap(最初のスタブは空のスタブで、2番目のスタブは呼び出しますdelete[])が、「解放されているポインタ」はそうではありません。どうすればこれを見つけることができますか?

また、どこにありmalloc_error_breakますか?

4

2 に答える 2

3

割り当てられたメモリをコピーするコピー コンストラクタはありますか? コピー コンストラクターがない場合、または存在するが割り当てられたメモリをコピーしない場合、2 つのオブジェクトのデストラクタは同じメモリ位置を解放しようとします。

于 2013-01-08T16:31:05.750 に答える
2

~Clusteringこれは、デストラクタで何かがうまくいかないことを示しています~NodeMap(最初のものは空のスタブであり、2番目のものは を呼び出しますdelete[]) が、「解放されるポインタ」が何であるかはわかりません。

「空のスタブ」だからといって~Clustering、何もしないというわけではありません。デストラクタの本体を実行した後、デストラクタは直接非バリアント非静的データ メンバーごとにデストラクタを呼び出します。どうやらあなたのクラスClusteringには type のデータメンバーが含まれているようNodeMap<long,long>です。

どうすればこれを見つけることができますか?

あなたのクラスにはいくつの割り当てられた配列がNodeMap<long,long>含まれていますか? 1つだけなら、それが1つです。~NodeMap複数ある場合は、実行をステップ実行できるようにブレークポイントを設定します。

于 2013-01-08T16:35:20.727 に答える