[解決済み] ptr が NULL の場合の free(ptr) はメモリを破壊するか?
2022-06-04 01:41:18
質問
理論的には以下のようになります。
free(ptr);
free(ptr);
は、すでに解放されているメモリを解放しているため、メモリ破壊となります。
しかし、もし
free(ptr);
ptr=NULL;
free(ptr);
OSが未定義の方法で動作するように、私は何が起こっているかについて、このための実際の理論的な分析を得ることができません。 私が何をしているにせよ、これはメモリ破壊なのでしょうか、それとも違うのでしょうか。
NULLポインタの解放は有効ですか?
どのように解決するのですか?
7.20.3.2の
free
機能あらすじ
#include <stdlib.h> void free(void *ptr);
説明
この
free
関数が指す空間はptr
が指す領域が解放される。 更なる割り当てに利用できるようにします。もしptr
がヌルポインタの場合、何も起こりません。
参照 ISO-IEC 9899 .
とはいえ、野生のさまざまなコードベースを見ていると、人々が時々そうしていることに気づくでしょう。
if (ptr)
free(ptr);
これは、いくつかの C 言語のランタイム(PalmOS では確かにそうだったように記憶しています)が
NULL
ポインタを解放するときにクラッシュしてしまうからです。
しかし、現在では、安全なものとして
free(NULL)
は、規格の指示通りnopとするのが無難でしょう。
関連
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] Valgrind が初期化されていないバイトについて警告する
-
[解決済み] C関数から文字列を返す
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] Pythonで明示的にメモリを解放するにはどうしたらいいですか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?
-
[解決済み] LD_PRELOADのトリックとは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
initializer element is not constant "というエラーが表示されるのですが?
-
C/C++の再定義
-
[解決済み] Valgrind が初期化されていないバイトについて警告する
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] FortranはC言語よりも重い計算を最適化しやすいですか?
-
[解決済み] C言語で "unsigned long "をprintfする方法は?