問題タブ [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 - C メモリ割り当てに関する質問
string
そのため、作成したタイプで機能する関数がいくつかあります。それらの 1 つは、動的に割り当てられた文字列を作成します。もう 1 つは、前述の文字列を受け取り、それを拡張します。そして最後のものは文字列を解放します。注: 関数名は変更されていますが、すべて私が独自に定義したものです。
上記のコードは機能します - コンパイルして正常に実行されます。以下のコードは機能しません - コンパイル、実行、そして
コードの違いは、adds()
関数がもう 1 文字 (a ) を追加していること!
です。追加する文字に違いはありません。長さだけです。完全を期すために、次のコードは機能しません。
奇妙なことに、別の関数addc()
(文字列の代わりに 1 文字を追加する) を使用する次のコードは機能します。
同じことを行う以下も機能します。
動作しないすべてのエラーは次のとおりです。
(test
私がこれを持っているプログラムの非常にわかりやすい名前です。)
関数の内部に関する限り、 mymake()
は への呼び出しと へstrlen()
の 2 つの呼び出しと へmalloc()
の呼び出しmemcpy()
、 myadds()
は への呼び出し、 へstrlen()
の呼び出しrealloc()
、 への呼び出しmemcpy()
、 myfree()
は標準ライブラリへの 2 つの呼び出しfree()
です。
なぜ私がこれを取得しているのか、または分解してデバッガーを使用する必要があるのでしょうか? adds()
sではなく、特定の長さを超える es でのみ取得していaddc()
ます。
関数のコードを分解して投稿する:
c - mpz_t の配列へのポインターでの double free エラー
私は現在libgmpを学んでおり、そのために素因数を見つける小さなプログラムを書いています。私のプログラムは、さまざまな量の mpz_t 整数 (特定の数値の素因数) で配列を埋める関数を呼び出します。これを返す必要があります。最後の要素を NULL に設定することを計画しているので、関数が検出した mpz_t 整数の数を知っています。
私の問題は、mpz_t 整数へのポインターの配列でダブル フリー エラーが発生することです。私の問題を説明するサンプルコードをいくつか書きました:
2 と 5 は stdout に出力されるので、割り当ては問題ないようです。しかし、私は以下のダブルフリーエラーを取得しています:
私はまだポインターに完全に慣れており、gccはエラーを出しませんが、これは間違っていると確信しており、次のようなことをする必要があります
それ以外の:
しかし、それは私にコンパイラエラーを与えます
とにかく、私の質問は次のとおりです。
- mpz_init_set_ui() 呼び出しでポインターを逆参照する必要があると確信していますが、なぜそれが間違っているのですか?
- これを行うより良い方法はありますか?連結リストを使用する必要がありますか?(連結リストはまだ学習していません。これには配列が最適だと思いますが、本当に難しい場合は教えてください) 3. 構造体を作成した方がよいでしょうか配列へのポインターと、配列内の要素の量を含む別の変数を使用して、代わりにそれへのポインターを返しますか?
プラットフォームは、関連する場合に備えて Linux 32 ビットです。
これが私が今持っているコードです。これを変更したいのですが、スタックで mpz_t の配列を宣言します。しかし、 main() を関数にしたい:
よろしくお願いします。
c - ダングリングポインターとダブルフリー
いくつかのつらい経験を経て、ダングリング ポインターとダブル フリーの問題が理解できました。私は適切な解決策を求めています。
aStruct
他の配列を含むいくつかのフィールドがあります。
正常に終了するfree_aStruct(X)
ように書く方法はありますか?free_aStruct(B)
上記を実行すると、が呼び出されたA = NULL
ときにのみ設定されます。がぶら下がっています。free_aStruct(A);
B
この状況をどのように回避/改善できますか? 参照カウントは唯一の実行可能な解決策ですか? free_aStruct(B);
または、爆発を防ぐために、メモリを解放するための他の「防御的な」アプローチはありますか?
c++ - ベクトルに追加すると、デストラクタ内でダブルフリー
ねえ、私はドラムマシンに取り組んでいて、ベクトルに問題があります。
各シーケンスにはサンプルのリストがあり、サンプルはベクトルで並べられています。ただし、サンプルがベクトルでpush_backの場合、サンプルのデストラクタが呼び出され、ダブルフリーエラーが発生します。
サンプル作成コードは次のとおりです。
そして、ベクトル内の各サンプルを作成する「Dynamo」コード:
main()は次のとおりです。
そして、これはプログラムが実行されたときに起こることです:
ただし、デストラクタからdelete []を削除すると、プログラムは完全に実行されます。
これを引き起こしているのは何ですか?どんな助けでも大歓迎です。
c++ - UnMapViewOFFile() のエラー 487 (ERROR_INVALID_ADDRESS) を無視することはできますか?
こんにちは。 Windows および Linux 32 ビット アプリケーションで使用するメモリ マップ ファイル キャッシュ プログラムのプロトタイプを作成しようとしています。プロトタイプを実行するたびに、UnMapViewOfFile を呼び出してキャッシュされたメモリ マップ ファイル領域のマップを解除しようとすると、エラー 487 (Error Invalid Address) が発生します。これは、以前のマップされていない領域をマップ解除しようとしたために発生していると考えられます。このエラー メッセージを無視できるかどうか疑問に思っていました。
MapViewOfFile へのすべての呼び出しが次の方法で UnMapViewOfFile と一致するように最善を尽くします。 MapViewOfFile を呼び出すたびに、次のコードを使用します。
メモリ マップされたファイル領域をマップ解除するたびに、次の抜粋を使用します。
クラス Range は次のようになります。
この投稿を読んでいただきありがとうございます。
memory-management - FORTRAN での割り当て解除とメモリ割り当ての問題
FORTRAN コードの一部の割り当て解除と割り当てに問題があります。特に、この問題は、Web 上のエラー メッセージの検索からのメモリ割り当てに関係していると思います。エラーメッセージは無効なポインターについて述べていますが、プログラムでポインターを使用していません
f ループの反復 # 2 (以下を参照) を完了した後、プログラムがクラッシュするか、ほとんどの場合クラッシュし、フリーズすることもあります。これがバグのポイントであると確信しています。プログラムはこの時点まで実行されます。
表示されていないサブルーチンがありますが、それらは他のシミュレーションの組み合わせで機能するため、問題がないと確信しています。私はプログラム内の他の場所で deallocate と allocate を (成功して) 使用しているので、ここで機能していないことに驚いています。
読みやすくするために、プログラムの一部のみを示しています。特に、私が書いたサブルーチンへの呼び出しを削除しました。プログラマーが問題を解決するのに十分な情報を提供できたことを願っています。そうでない場合は、他に必要な情報を指定してください。喜んで対応させていただきます。さまざまなコンパイラ オプションを使用してプログラムをコンパイルし、いくつかのバグを修正し、警告をすべて削除しました。ただし、この時点では、コンパイラ オプションからはそれ以上の情報は得られません。
コンパイラ オプション
出力
エラーメッセージ
[簡潔にするために、残りのエラー メッセージは表示されません]
iphone - double free***ARCでデバッグするためにmalloc_error_breakにブレークポイントを設定します
コアデータやスレッディングなどを使用してアプリケーションでARCを使用していますが、クラッシュすることなくコアデータをスレッディングで動作させるためにすべてのハードワークを実行した後、次の理由で新しいクラッシュが発生しています-
これをどのように処理する必要がありますか?オブジェクトの保持数を制御することはできません。
c - 静的ライブラリが 2 回読み込まれました
libssl.a に静的にリンクする共有オブジェクト A.so と、 libssl.a にも静的にリンクする別の共有オブジェクト B.so があります。
A.so & B.so には、GLOBAL スコープの libssl.a からのシンボルがあります。これを readelf -s A.so で確認しました
A.so と B.so をロードする実行可能ファイル a.out があります。a.out が終了すると、A.so の libssl.a からのシンボルの 1 つで double free エラーが発生します。
libssl.a は各共有オブジェクトに静的にリンクされていますが、それらはグローバルに公開されているため、ローカル コピーを選択する代わりに同じシンボルが共有される可能性があります。
これの回避策は何ですか? ここでシンボルをローカルにする方法は?
助けてください
c++ - 私のC ++コードでダブルフリーエラーが発生しないのはなぜですか?
g++ バージョンはg++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
私のテストコードは次のとおりです
テスト ケース 1 だけでは、プログラムはエラーなしで実行されますが、テスト 2 を追加すると、このプログラムにはダブル フリー エラーが発生します。このエラーがどのように発生するのかわかりませんか?