[解決済み] ダブルフリーとはどういう意味ですか?
質問
タイトルの通り、私はC言語を始めたばかりで、もうすぐ中間テストがあります。現在過去問で復習しているのですが、繰り返し出てくるテーマがダブルフリー問題です。を呼び出す処理であることは理解しています。
free()
を同じメモリ位置で2回表示させたいのですが、いくつか質問があり、どう答えていいのか100%わかりません。
質問1:C言語のダブルフリーの結果はどのようなもので、なぜそれが問題なのですか?
二重解放が発生します。
char* ptr = malloc(sizeof(char));
*ptr = 'a';
free(ptr);
free(ptr);
これに対する私の回答は、0x0のメモリアドレスが返されて、システムが不安定になる・クラッシュする、というものです。また、私の記憶が正しければ、ダブルフリーは実際には
malloc
バッファオーバーフローが2回発生し、システムが脆弱になります。
この質問を簡潔にまとめると、どのようになりますか?
質問2:特に導入が容易な状況を説明しなさい。 Cのダブルフリー?
ポインタの受け渡しの際に、ある関数で誤って解放してしまい、また気づかずに解放してしまうことがあるのではないかと思ったのですが?
繰り返しになりますが、これをまとめると "best"な方法は何でしょうか?
どのように解決するのか?
C言語のダブルフリーは、技術的に言えば、次のようになります。
未定義の動作
. これは、プログラムが完全に任意の動作をすることができ、何が起こるかわからないということを意味します。これは確かに悪いことだ! 実際には、メモリブロックをダブルフリーにすると、メモリマネージャの状態が破壊され、既存のメモリブロックが破壊されたり、将来の割り当てが奇妙な方法で失敗したりするかもしれません (たとえば、同じメモリが 2 つの異なる
malloc
).
二重解放は、あらゆる種類のケースで発生します。よくあるのは、複数の異なるオブジェクトが互いにポインタを持ち、そのポインタが
free
. このような場合、注意しないと
free
の場合、オブジェクトのクリーンアップ時に同じポインタが複数回表示されます。他にもいろいろなケースがあるんですけどね。
お役に立てれば幸いです。
関連
-
[解決済み】ENOENTが「そのようなファイルやディレクトリはありません」という意味であるのはなぜですか?
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない