c语言读文件遇到的一个很奇怪问题:文件读取时文件指针突然变成一个无效地址

lawen-y lawen-y 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用c写了一段读文件的代码。文件中数据量已知,每条记录按固定字节数存储,在读到第三条(反正前几条)时文件指针就变成了一个无效值。由于不太方便贴出代码,但是大致如下:

int readfile()
{
FILE*fp;
int k = 0;
char buff[1024]={0};
fp = fopen("filename","r");
if(fp==NULL)
return 0;
while(k<10 && !feof(fp)) //这里由于记录条数是已知,我这里就直接写成10
{
fread(buff,1023,1,fp);
//这里有一些无关fp 和k 的处理代码
k++;
}
fclose(fp);
fp = NULL;
return 0;
}

问题:在读入前几条后,出现段错误,通过core文件发现是fclose关闭的文件指针有问题。
通过gdb 调试,发现在读前几条数据后,上面k 突然变成一个很大的值(8位数,看上去像一个地址),fp指针变成了和刚开始打开文件不一样的地址,变成了一个无效地址,导致fclose失败,段错误。(注:不存在多线程,打开的文件不存在在读取时候被删除的情况)

不知道大家有没有遇到这种情况,以前没遇到过这种问题,不知道大家有什么解决办法?多谢了!
[/size]
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
lawen-y
C语言 70,040 成员 243,237 内容