段错误 - fclose / fopen
Posted
技术标签:
【中文标题】段错误 - fclose / fopen【英文标题】:Segfault - fclose / fopen 【发布时间】:2013-03-27 00:24:55 【问题描述】:我的以下 C 代码有问题:
int main(void)
FILE* infile = fopen("file","r);
FILE* fp = NULL;
unsigned char* buffer = malloc(512);
while( fread(buffer,512,1,infile) > 0 ) //reading a file block by block
if(buffer[0] == 0xff)
... //defining variable "name"
if(fp != NULL)fclose(fp);
fp = fopen(name,"w+");
fwrite(buffer,512,1,fp);
else if(fp != NULL)
fwrite(buffer,512,1,fp);
fclose 后我似乎无法使用相同的指针打开 fopen,为什么?我需要我的指针在主要的任何地方都可以访问,所以我不能在我的时间里声明一个新的。
编辑:天哪,问题解决了。我可能是超级累了。我正在编译错误的文件。无论如何...
谢谢各位!
【问题讨论】:
你没有在那里“使用”同一个指针。您只是在捕获一个返回值。段错误是由您未在此处发布的代码引起的。 我知道这很奇怪,但如果我不使用 flose(fp) 释放内存,则不会再发生 sgefault。 请构建最小的完整程序来重现问题。 在这里,我编辑了我的代码。谢谢你们的回答。 请注意,fread(buffer, 512, 1, infile)
将返回 0 或 1,具体取决于它是否读取 512 字节。如果您只想读取 512 字节块,那很好。如果您想一次最多读取 512 个字节,那么您需要 size_t nbytes = fread(buffer, 1, 512, infile);
并检查您读取的字节数是否为非零。
【参考方案1】:
很难说出原因,因为您没有向我们展示您的所有代码。但是,重新打开文件应该非常简单:
#include <stdio.h>
int main(void)
FILE* fp = NULL;
char name[] = "somefile";
for (;;)
// do something
if ((fp = fopen(name, "w+")) == NULL)
break;
// do something with the file
fclose(fp);
// do something
return 0;
【讨论】:
如果fopen()
返回NULL
,你有一个错误——可能不应该只是从循环中中断。
@DietrichEpp 是的。我只是表明重新打开很简单。以上是关于段错误 - fclose / fopen的主要内容,如果未能解决你的问题,请参考以下文章