You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:01:03