我正在使用此功能将文件的内容读入字符串
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。我的功能出了什么问题?
感谢。
答案 0 :(得分:1)
" fopen()函数"并没有导致内存损坏'也没有失败" free()" (如果事实上你并没有做免费的()。
您正在验证来自" fopen()"的回复 - 很好问:为什么你还没有检查错误条件的fseek(),ftell(),rewind()和fread()?
我的猜测是temp[size]=0;
可能是导致内存损坏的罪魁祸首。或许fread()
。了解"尺寸"肯定会有用。
建议:
仔细浏览调试器,并验证您的I / O返回的每一步