为什么执行到feof 这里的时候出现了段错误?
代码在这里:
程序代码:
#include <stdio.h>
#include <stdlib.h>
struct redType{
int account;
int amount;
};
struct rcdType{
int account;
int amount;
enum{
INSERT, //插入
CHANGE, //修改
DELETE //删除
}code;
};
typedef struct redType redType;
typedef struct rcdType rcdType;
/*
void printRed(void* addr, int sizePerOne, int count)
{
int i = 0;
void *ptr = addr;
for (i = 0; i < count; i++)
{
printf("%d\t%d\n", ((redType*)ptr)->account, ((redType*)ptr)->amount);
ptr += sizePerOne;
}
}*/
void mergeFile(FILE* oldFile, FILE* changeFile, FILE *newFile)
{
struct redType oldItem;
struct rcdType changeItem;
fread(&oldItem, sizeof(redType), 1, oldFile);
feof(oldFile);
fread(&changeFile, sizeof(rcdType), 1, changeFile);
feof(changeFile);
}
int main()
{
redType oldGroup[8] = {{1, 50 }, {5, 78},
{12, 100}, {14, 95},
{15, 360}, {18, 200},
{20, 510}, {600, 0}};
rcdType changeGroup[6] = {{8, 100, INSERT},
{12, -25, CHANGE},
{14, 38, CHANGE},
{18, -200, DELETE},
{21, 60, INSERT},
{800, 0, DELETE}};
FILE* oldFile = fopen("old","wb");
fwrite(oldGroup ,sizeof(redType), 8 , oldFile);
fclose(oldFile);
FILE* changeFile = fopen("change","wb");
fwrite(changeGroup , sizeof(rcdType), 6, changeFile);
fclose(changeFile);
FILE* oldFp = fopen("old", "rb");
FILE* changeFp = fopen("change", "rb");
FILE* newFp = fopen("new", "wb");
if (!(oldFp && changeFp && newFp))
{
perror("Error!");
exit(1);
}
mergeFile(oldFp, changeFp, newFp);
return 0;
}
其实这原本是一个比较大的程序,只不过被我给简化掉了。程序不是我写的,是别人写的,由于她运行的时候出现了问题,所以我决定改改这个程序。
经过我的调试之后,发现问题出现在这里:
程序代码:fread(&oldItem, sizeof(redType), 1, oldFile); feof(oldFile); fread(&changeFile, sizeof(rcdType), 1, changeFile); feof(changeFile);
当执行到feof语句的时候,程序就出现 段错误,请问是什么原因导致了段错误?
我调试的时候发现文件指针不为NULL。
顺便提一句:帮我找出问题就好了,不要管这个程序是干嘛用的,也不要管这个程序为什么要这么写,找出错误才是重点,谢谢!
我的平台:Linux GCC 4.6.3/GCC 4.8.0








