[解決済み] フリー後の変数にNULLを設定する
2022-04-22 02:08:36
質問
私の会社では、コーディングルールがあり、メモリを解放した後、変数をリセットして
NULL
. 例えば ...
void some_func ()
{
int *nPtr;
nPtr = malloc (100);
free (nPtr);
nPtr = NULL;
return;
}
上のコードのような場合は
NULL
は何の意味も持ちません。それとも何か見落としているのでしょうか?
このような場合に意味がないのであれば、このコーディングルールを削除するよう"quality team"に申し入れようと思っています。アドバイスをお願いします。
解決方法は?
未使用のポインタをNULLに設定することは、ダングリングポインタのバグから保護するための防御的なスタイルです。ダングリングポインタが解放された後にアクセスされた場合、ランダムなメモリを読み取ったり上書きしたりする可能性があります。NULLポインタがアクセスされると、ほとんどのシステムで即座にクラッシュし、何がエラーなのかがすぐに分かります。
ローカル変数の場合、ポインタが解放された後にもうアクセスされないことが "obvious" であれば少し意味がないかもしれませんので、このスタイルはメンバーデータやグローバル変数により適しています。ローカル変数であっても、メモリ解放後も関数が継続する場合は、この方法がよいでしょう。
このスタイルを完成させるには、ポインタに真のポインタ値を割り当てる前に、ポインタをNULLに初期化することも必要です。
関連
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み] typeof !== "undefined" vs. != null
-
[解決済み] .aファイル、.soファイルとは何ですか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?
-
[解決済み】malloc()とfree()はどのように動作するのですか?
-
[解決済み] C言語プログラミング言語」の本には、なぜmallocをキャストしなければならないと書いてあるのですか?
最新
-
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++の配列コピー
-
[解決済み] flexible array member not at end of structエラーの原因は何ですか?
-
[解決済み] C言語の書式指定子 %ul と %lu の違いは何ですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] while ( !feof (file) ) 」は、なぜいつも間違っているのですか?
-
[解決済み] なぜ16進数には0xがつくのですか?
-
[解決済み] FortranはC言語よりも重い計算を最適化しやすいですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?