問題タブ [double-free]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - mallopt M_CHECK_ACTION エラーをログファイルに出力する
mallopt(M_CHECK_ACTION, 3) を使用して、ダブルフリー シナリオを引き起こす可能性のある不正なコードからプロセスを保護しようとしています。
ダブルフリーの場合のエラーをログファイルに出力する方法はありますか? 私のプロセスはすでに stderr をリダイレクトしています (つまり、「エラー」呼び出しがファイルに記録されています) が、この特定のエラーが画面に出力されます。
c++ - それ自体の中でオブジェクトを交換する
オブジェクトをそれ自体の中で交換しようとしています。動作しますが、デストラクタを追加すると、ダブルフリーエラーが発生します。これを防ぐ方法はありますか?私が話している方法はですvoid swap(SimpleArray &object)
。
(私の投稿に間違った情報が含まれる前にこれを読んだ場合は申し訳ありません...)
これは機能しますが、デストラクタを追加すると、「ダブルフリーまたは破損エラー」が発生します。どうすればこれを解決できますか?これがメインの関数で、めちゃくちゃになっています。
c++ - 再帰的メソッド C++
私は現在リンクされたリスト構造を練習しており、そのアルゴリズムを使用してプログラムを作成しました。プログラムには、リンクされたリストのすべての要素を削除する再帰的な方法があります。ただし、その方法ではプログラムがクラッシュします。
このメソッドは、ユーザーが終了したいときに実行されます。「phead」は人物リストの最初の要素を表します。示された問題は次のとおりです:二重解放または破損 (fasttop)
クラス Person は次のとおりです。
ありがとう。
memory-management - 誰が間違った kfree を発行しているかを検出する方法
カーネル コードで二重の kfree が疑われます。基本的に、モジュール内に kzalloced および kfreed されたデータ構造があります。同じアドレスが割り当てられ、モジュールで解放されずに再度割り当てられていることに気付きました。
間違った kfree が発行された場所を見つけるには、どのような手法を使用すればよいかを知りたいです。
c++ - デコンストラクターでポインターを削除した後の実行でのダブルフリー エラー
次のように、コンストラクターで動的に割り当てられるメンバーポインターを含むクラスがあります。
基本的に、入力バッファーを動的に割り当てられたメンバーバッファーにコピーします。別のクラスのコンストラクターで、このクラスを次のように使用します。
ただし、このクラスをインスタンス化すると、次のエラーが表示されます。これは、を二重に解放していることを示しているようですm_bufRecord
。
問題は、要素へのポインターを含むクラスの挿入とvector
、同じポインターでデストラクタが 2 回呼び出されることにあると推測していますが、これがどのように発生するかはわかりません。ここで何が間違っていますか?
multithreading - Vala: 結合されたスレッドが参照されなくなると無効な読み取り
以下のコードを valgrind でコンパイルして実行すると、スレッドに参加したときにスレッドが解放され、後で参照されなくなったときに、既に解放されているメモリが読み取られるように見えます。
これは valgrind の「誤検知」ですか? そうでない場合、大規模な並列プログラムでは一般に無視しても安全ですか? どうすれば回避できますか?
「thread = NULL;」を手動で追加すると 生成された C コードの join 呼び出しと _g_thread_unref0 マクロの間で、valgrind 出力で無効な読み取りがなくなりました。
c - 「ダブルフリー」とは?
タイトルが示すように、私は C を初めて使用し、間もなく中間試験を控えています。私は現在、過去の論文から改訂を行っており、繰り返されるテーマは二重自由問題です。同じメモリ位置を 2 回呼び出すプロセスであることは理解していますが、free()
答え方が 100% わからないいくつかの質問があります。
質問 1: C での double free の結果は何ですか? また、なぜこのような問題が生じるのですか?
これにより、二重解放が発生します。
これに対する私の回答は、0x0 メモリ アドレスが返され、システムの不安定性やクラッシュが発生するというものです。また、記憶が正しければ、ダブル フリーは実際にはmalloc
2 回呼び出すことができ、その結果バッファ オーバーフローが発生し、システムが脆弱なままになります。
この質問を簡単に要約するには、どうするのが一番良いでしょうか?
質問 2: C で double free を導入するのが特に簡単な状況を説明してください。
あなたの周りにポインターを渡すと、ある関数で誤って解放し、気付かずに再び解放する可能性があると考えていましたか?
繰り返しますが、これを要約する「最良の」方法は何ですか?