fclose导致分段错误?
问题描述:
下面是源代码的一小部分,其中fclose
导致错误?这个函数并不总是被调用,在某些特定的条件下调用这个函数。fclose导致分段错误?
int write_into_file (char * file_name)
{
FILE * fp = NULL ;
if (file_name == NULL)
{
return FAIL ;
}
if ((fp = fopen (file_name , "r")) == NULL)
{
if ((fp = fopen (file_name, "w")) == NULL)
{
return FAIL ;
}
}
fclose (fp) ;
fp = NULL ;
return SUCESS;
}
我们将大小为1024的字符缓冲区传递给file_name。 请谁能告诉我为什么fclose会导致分段错误?
答
我看不出有任何可能的方式是fclose
可以在这里造成段错误,我认为你的问题在于其他地方的计划。
这可能是可能的堆栈得到了其他地方损坏,该Bug显示当fclose
被调用。我建议你再次检查一下你的其他源代码,然后用调试器/内存分析器仔细观察会发生什么。
我可以看到,可能会导致错误的唯一的另一件事是file_name
没有空值终止。
+0
感谢您的答复。是的,file_name已被空终止。我想我必须与valgrind进行核对。 – sach 2012-01-03 19:10:29
答
没有与FCLOSE没有问题的()。问题可能出在您将file_name与NULL进行比较,或者可能与代码的其他部分有关。
试图通过'gdb'或'valgrind'作为开始运行它。代码看起来没有什么问题,所以你应该提供尽可能多的关于崩溃的信息。 'fclose()'似乎不太可能是真正的罪魁祸首。 – 2012-01-03 19:00:50
字符缓冲区空终止?字符缓冲区是一个有效的文件名?为什么你打开文件阅读,然后尝试打开它写入,如果失败? – 2012-01-03 19:01:14
的可能的复制[FCLOSE()导致分段错误](http://*.com/questions/1443164/fclose-causing-segmentation-fault) – 2015-11-13 22:22:14