c语言读文件遇到的一个很奇怪问题:文件读取时文件指针突然变成一个无效地址
用c写了一段读文件的代码。文件中数据量已知,每条记录按固定字节数存储,在读到第三条(反正前几条)时文件指针就变成了一个无效值。由于不太方便贴出代码,但是大致如下:
问题:在读入前几条后,出现段错误,通过core文件发现是fclose关闭的文件指针有问题。
通过gdb 调试,发现在读前几条数据后,上面k 突然变成一个很大的值(8位数,看上去像一个地址),fp指针变成了和刚开始打开文件不一样的地址,变成了一个无效地址,导致fclose失败,段错误。(注:不存在多线程,打开的文件不存在在读取时候被删除的情况)
不知道大家有没有遇到这种情况,以前没遇到过这种问题,不知道大家有什么解决办法?多谢了![/size]
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]
...全文
相关推荐
奇怪的C语言特性
数组指针特性在C语言中,a[2] 等价于 2[a]。这个特性可以用于使用数组、指针、字符串,但不能用在变量定义时。
C语言中指针使用应注意的问题.pdf
C语言中指针使用应注意的问题在C语言中,指针是一种非常重要的数据类型,它可以用来存储内存地址,并进行内存的读写操作。然而,在使用指针时,需要注意一些重要的问题,以避免出现错误和BUG。1.
奇怪的大冒险_c语言游戏_
【压缩包子文件的文件名称列表】:"第28组_奇怪的大冒险_张国豪_陈旭_林杰" 暗示这个游戏可能是由一个小组成员共同完成的,其中张国豪、陈旭和林杰可能是团队成员的名字。
你必须知道的495个C语言问题.pdf
根据给定的文件信息,我们可以从中提取出一系列与C语言相关的知识点。这本书通过问答的形式,覆盖了C语言的多个方面,包括初始化、数组、指针、字符串、内存分配、库函数、C预处理器等内容。
c语言数组越界C程序中由于数据越界产生的一些奇妙的现象
函数指针是C语言中一个重要的数据类型,它指向函数的首地址。函数指针的定义形式为:返回值类型(*函数指针名称)(参数列表)。


