malloc返回空指针时是否需调用free?是否有必要做空指针检查?
关于malloc返回NULL时的free调用与检查问题
1. 调用free(NULL)算不算良好编程实践?
不算。虽然C标准允许这么做,但这属于完全冗余的操作——你已经明确知道指针是NULL了,调用free它不会有任何实际作用,纯粹多写了一行没用的代码。示例代码里的free(ptr)完全可以删掉,直接return NULL就行。
2. 调用free(NULL)会产生影响吗?
不会。根据C语言标准,free(NULL)是合法操作,函数会直接返回,不会执行任何内存释放动作,也不会导致程序崩溃、内存泄漏或者其他错误。但也别指望它能帮你做什么,就是个无意义的空操作。
3. 有没有必要检查malloc的返回值?
非常有必要。当系统内存不足或者分配请求超出可用资源时,malloc会返回NULL。如果不检查就直接使用这个指针,会触发空指针解引用,这属于未定义行为——轻则程序崩溃,重则导致内存损坏、数据丢失等难以排查的问题。尤其是在嵌入式系统、内存紧张的服务器环境下,这种分配失败的概率并不低,必须做检查。
优化后的示例代码
char *some_function() { char *ptr = (char *)malloc(sizeof(char) * 10); if (ptr == NULL) { // 这里不需要free,直接返回NULL即可 return NULL; } // 后续指针操作 }
内容的提问来源于stack exchange,提问作者Ernest P W
相关产品推荐
相关产品推荐

