可能性のある複製:
ptrがNULLであるfree(ptr)はメモリを破損しますか?
ポインターがmalloc()
edだった場合にポインターを解放するC関数を作成しています。ポインターはNULL(エラーが発生し、コードが何も割り当てる機会を得られなかった場合)またはmalloc()
で割り当てられます。 free(ptr);
の代わりにif (ptr != NULL) free(ptr);
を使用しても安全ですか?
gcc
は-Wall -Wextra -ansi -pedantic
を使用してもまったく文句を言いませんが、良い習慣ですか?
ISO-IEC 9899 からC標準7.20.3.2/2を引用
void free(void *ptr);
ptr
がNULLポインターの場合、アクションは発生しません。
NULL
を確認しないでください。読み取るダミーコードが増えるだけなので、悪い習慣です。
ただし、NULL
&coを使用する場合は、malloc
ポインターを常にチェックする必要がありますalways。その場合、NULL
は何かがうまくいかなかったことを意味し、おそらくメモリが利用できなかったことを意味します。
NULL
を呼び出す前にfree
の確認を行わないことをお勧めします。チェックするとコードに不要な混乱が追加されるだけで、free(NULL)
は安全であることが保証されます。 C99標準のセクション7.20.3.2/2から:
Free関数は、ptrが指すスペースを割り振り解除します。つまり、さらなる割り振りに使用できるようにします。 ptrがNULLポインターの場合、アクションは発生しません。
ランダムにグーグルが現れる http://linux.die.net/man/3/free 状態:
PtrがNULLの場合、操作は実行されません。
私の意見では、いいえ、少なくともあなたの場合はそうではありません。
メモリを割り当てることができなかった場合は、freeを呼び出す前に、そのWAYを確認しておく必要があります。