C语言使用FILE指针时报fp未初始化错误该如何解决?
问题修复说明
核心报错原因
- 你声明
FILE * fp指针后,仅调用了fopen(infilename,"r")却没有将该函数的返回值赋值给fp变量,调用fopen得到的文件指针被直接丢弃,fp始终是未初始化的野指针,编译器检测到你后续判断fp == NULL时操作的是未初始化变量,触发告警。 - 你的编译选项开启了
-Werror=uninitialized,会将未初始化变量相关的警告直接升级为编译错误,因此直接阻断了编译流程。 - 额外逻辑漏洞:如果
fp确实为NULL,此时调用fclose(fp)属于非法操作,会直接导致程序崩溃,空指针不需要执行关闭操作。
修复后的代码示例
bool runIntegrate(char * infilename, char * outfilename) // return true if it can successfully open and read the input // and open and write the output // return false when encountering any problem { Integration intrg; // 将fopen的返回值赋值给fp变量 FILE * fp = fopen(infilename,"r"); // 打开输入文件用于读取 // 若fopen失败,返回false if(fp == NULL) { // 删除空指针场景下的错误fclose调用 return false; } if (fscanf(fp,"%lf\n", &intrg.lowerlimit) != 1){ fclose(fp); return false; } // 后续原有逻辑执行完后,注意正常路径也要调用fclose(fp)释放资源
内容的提问来源于stack exchange,提问作者aerialace8
相关产品推荐
相关产品推荐

