1. ホーム
  2. c

[解決済み] C言語でNULLポインタを解放するのは良い習慣ですか?重複

2023-03-08 05:46:24

質問

重複の可能性があります。

ptr が NULL の場合の free(ptr) はメモリを破壊しますか?

私は、ポインタがNULLであった場合、それを解放するC関数を書いています。 malloc() された場合にポインタを解放する C 関数を書いています。ポインタは NULL (エラーが発生し、コードが何も割り当てる機会を得られなかった場合) か、または malloc() . を使っても大丈夫なのでしょうか? free(ptr); の代わりに if (ptr != NULL) free(ptr); ?

gcc を使っても、全く文句を言いません。 -Wall -Wextra -ansi -pedantic を使っても全く文句を言いませんが、これは良い習慣なのでしょうか?

どのように解決するのですか?

C 規格 7.20.3.2/2 から引用します。 ISO-IEC 9899 :

void free(void *ptr);

もし ptr が NULL ポインタの場合、何も起こりません。

をチェックしない NULL をチェックすることは、読むべきダミーコードを増やすだけであり、悪い習慣です。


しかし、あなたは 常に をチェックします。 NULL のポインタをチェックします。 malloc を使用する場合、その場合 NULL は何かがうまくいかなかったことを意味し、最も可能性が高いのはメモリが利用できなかったことです。