web-dev-qa-db-ja.com

CでNULLポインターを解放することをお勧めしますか?

可能性のある複製:
ptrがNULLであるfree(ptr)はメモリを破損しますか?

ポインターがmalloc() edだった場合にポインターを解放するC関数を作成しています。ポインターはNULL(エラーが発生し、コードが何も割り当てる機会を得られなかった場合)またはmalloc()で割り当てられます。 free(ptr);の代わりにif (ptr != NULL) free(ptr);を使用しても安全ですか?

gcc-Wall -Wextra -ansi -pedanticを使用してもまったく文句を言いませんが、良い習慣ですか?

65
rid

ISO-IEC 9899 からC標準7.20.3.2/2を引用

void free(void *ptr);

ptrがNULLポインターの場合、アクションは発生しません。

NULLを確認しないでください。読み取るダミーコードが増えるだけなので、悪い習慣です。


ただし、NULL&coを使用する場合は、mallocポインターを常にチェックする必要がありますalways。その場合、NULLは何かがうまくいかなかったことを意味し、おそらくメモリが利用できなかったことを意味します。

135
orlp

NULLを呼び出す前にfreeの確認を行わないことをお勧めします。チェックするとコードに不要な混乱が追加されるだけで、free(NULL)は安全であることが保証されます。 C99標準のセクション7.20.3.2/2から:

Free関数は、ptrが指すスペースを割り振り解除します。つまり、さらなる割り振りに使用できるようにします。 ptrがNULLポインターの場合、アクションは発生しません。

20
jamesdlin

ランダムにグーグルが現れる http://linux.die.net/man/3/free 状態:

PtrがNULLの場合、操作は実行されません。

5
Hello71

私の意見では、いいえ、少なくともあなたの場合はそうではありません。

メモリを割り当てることができなかった場合は、freeを呼び出す前に、そのWAYを確認しておく必要があります。

4
George