解放後の使用とは? わかりやすく解説

解放後の使用

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/02/17 16:10 UTC 版)

malloc」の記事における「解放後の使用」の解説

ポインタfree関数渡されメモリ解放され後でその領域への参照行っても、その内容未定義であり利用できない。しかし、ポインタ自体残っていると誤って使ってしまうことがある次のコードはその例である。 int *ptr = malloc(sizeof(*ptr)); /* メモリ領域動的確保 */...free(ptr);/* ptr解放済み領域をまだ指したまま */*ptr = 0; /* 何が起きかわからない! */ このようなコード予測不能振る舞いをする。メモリ解放され後でシステムがその領域他の用途転用しているかもしれない。従って解放済みメモリ領域へのポインタ(ダングリングポインタ; dangling pointer)を使った書き込みプログラム内の別のデータ不正に書き換えてしまう。どういうデータ書き換えたかによって、その後プログラム動作異なる。単なるデータ破壊で済むかもしれないし、クラッシュするかもしれない。特に破壊的なバグとしては、同じポインタを2回free関数渡してしまうことであり、これを「二重解放; double free」と呼ぶ。これを防ぐため、解放した後でポインタ変数NULL格納することがあるポインタ変数無効な領域指しているかどうか後で調べるとき、NULL格納されているかどうか簡単に判定できるうになるまた、free(NULL)は何もしないことが規格保証されているので、NULL代入しておけば(free関数再度呼んだとしても)二重解放の危険はない。この技法寿命長いグローバル変数ポインタ定義する場合必須だが、寿命の短いローカル変数ポインタ定義する場合でもフールプルーフのために用いることができる。 int *ptr = malloc(sizeof(*ptr));...free(ptr);ptr = NULL;

※この「解放後の使用」の解説は、「malloc」の解説の一部です。
「解放後の使用」を含む「malloc」の記事については、「malloc」の概要を参照ください。

ウィキペディア小見出し辞書の「解放後の使用」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「解放後の使用」の関連用語

1
2% |||||

2
2% |||||

解放後の使用のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



解放後の使用のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのmalloc (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS