向fclose()传入空指针会引发什么问题?附代码示例解析
向fclose()传入空指针会发生什么?
先看你给出的示例代码:
FILE* file_name; file_name = fopen("some.txt", "r"); // some.txt不存在 if (file_name !=NULL) printf("nice"); fclose(file_name);
因为目标文件some.txt不存在,fopen会返回空指针(NULL),所以这段代码里的fclose(file_name)本质就是调用fclose(NULL)。
标准C的定义
根据C99及后续的标准,向fclose()传入空指针属于未定义行为。这意味着编译器或运行时环境没有固定的处理逻辑:可能直接触发段错误导致程序崩溃,可能毫无反应,甚至出现其他不可预料的副作用——标准不规定具体结果,完全取决于具体实现。
实际场景中的常见表现
在绝大多数主流标准库实现(比如Glibc、MSVC标准库)中,传入空指针给fclose()会直接导致程序崩溃,因为函数内部会尝试访问空指针指向的FILE结构体成员,触发内存访问错误。
代码修复建议
必须在调用fclose()前检查指针有效性,修正后的代码如下:
FILE* file_name = fopen("some.txt", "r"); if (file_name != NULL) { printf("nice"); fclose(file_name); // 仅在指针有效时执行关闭操作 }
内容的提问来源于stack exchange,提问作者akaCroc
相关产品推荐
相关产品推荐

