rid*_*rid 70 c pointers memory-management
我正在编写一个C函数,如果它被malloc()编辑,它将释放一个指针.指针可以是NULL(在发生错误并且代码没有机会分配任何内容的情况下)或分配malloc().使用安全free(ptr);而不是if (ptr != NULL) free(ptr);?
gcc即使有-Wall -Wextra -ansi -pedantic,也不会抱怨,但这是好的做法吗?
orl*_*rlp 140
引用ISO-IEC 9899的C标准7.20.3.2/2 :
void free(void *ptr);
Run Code Online (Sandbox Code Playgroud)
如果
ptr是空指针,则不执行任何操作.
不要检查NULL,它只会增加更多的虚拟代码来阅读,因此是一种不好的做法.
但是,使用&co 时必须始终检查NULL指针malloc.在这种情况下NULL意味着出现了问题,很可能是没有可用的内存.
jam*_*lin 20
NULL在打电话之前不打扰检查是一种好习惯free.检查只会给代码增加不必要的混乱,并free(NULL)保证安全.从C99标准的第7.20.3.2/2节开始:
free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.