二重解放または破損(!prev)エラーについて
2022-02-11 22:13:03
Double free or corruption (!prev)エラーについては、ウェブ上で盛んに議論されていますが、大きく分けて、同じメモリブロックを2回解放した場合と、メモリが範囲外で使われ、後から解放した場合の2つのケースがあります。
私が遭遇した状況を記録する。
クラスAはクラスBを内包しており、クラスBのデストラクタはクラスAのコンストラクタでメモリ解放操作を行う際に 関数本体での代入 ( b=B() ) クラスBに対して初期化操作を行い、インスタンスB()を生成するが、これが重大な問題を引き起こす。生成されたB()は一時的なもので、Aのコンストラクタが終了した後にB()を破棄し、メモリを一旦解放することになるのです。したがって、Aのインスタンスが破壊されると、再びBのデストラクタが呼び出され、二次解放が行われることになります。そして、クラスAのインスタンスbに属していた元のメモリは解放されず、メモリリークが発生します。
正しい方法は、クラスAの初期化リストでクラスBを初期化することです。
関連
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
undefinedエラーが発生しました:getaddrinfo ENOTFOUND; GETできません。
-
NoClassDefFoundError: org/hamcrest/SelfDescribing JUnit-4.11でエラー。
-
JavaScriptで不正なappendChildを解決する方法
-
一致するワイルドカードは厳密ですが、要素 'aop:aspectj' の宣言が見つかりません。
-
Tensorboard 1.13.1実行時のエラーです。OSError:[Errno 22] 無効な引数です。
-
Pygameでタイマーを使う
-
C++の完全なクラスはstdのメンバではない
-
Qt はエラーを報告します: 未解決のオーバーロードされた関数型と const char 型のオペランドが無効です .
-
AttributeError: 'NoneType' オブジェクトには 'get' 属性がありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedGitチュートリアル: ! [却下] master -> master (最初に取得) 解決策
-
アクセス違反の読み取り位置 ファイルやオブジェクトを書き込む関数にベクターを渡すとエラーになる
-
IIS 7.5上のASP.NET 4.0とチャートに関する質問
-
Python標準ライブラリ(各種モジュールの超定番入門書)
-
解決済み VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/O...
-
tensorflow.contrib'という名前のモジュールはありません。
-
python problem: SyntaxError: 1つのステートメントをコンパイルする際に複数のステートメントが見つかる
-
エラーです。未解決のコンパイル問題の解決
-
pycharmの未解決参照に対する解決策
-
android:textAlignment パラメータ説明