我正在用这个函数将文件的内容读取为字符串
void readFile2String(char **string, char location[]){
FILE *fileList;
int size;
char *temp;
char command[1024];
if((fileList=fopen(location,"r")) == NULL){
perror(" Error opening list of directories: ");
exit(2);
}
fseek(fileList,0,SEEK_END);
size = ftell(fileList);
rewind(fileList);
temp = malloc((size+1)*(sizeof(char)));
fread(temp,sizeof(char),size,fileList);
temp[size]=0; // Terminate string with 0
*string = temp;
fclose(fileList);
}
,我将使用字符串进行进一步操作。我把这个函数命名为
char *temp;
readFile2String(&temp, fileName);
我成功地获得了字符串中的文件内容。但是当我稍后尝试再次使用fopen时,我在运行时得到malloc错误。我试着在这个程序中注释掉对这个函数的调用,之后,我已经能够随心所欲地使用fopen了。我的功能有什么问题?
谢谢。
-
"fopen()"没有导致内存损坏,"free()"也没有失败(如果你没有使用free().
-
您正在验证"fopen()"的返回值——好。问:为什么不检查fseek()、ftell()、rewind()和read()是否有错误?
-
我猜
temp[size]=0;
可能是导致内存损坏的罪魁祸首。或者是fread()
。
建议:
仔细地遍历调试器,并验证每一步的I/O返回