1. ホーム
  2. c

[解決済み] フリー後の変数に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に初期化することも必要です。