调用fopen会在运行时出现malloc错误

时间:2015-07-11 22:18:04

标签: c string file malloc

我正在使用此功能将文件的内容读入字符串

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。我的功能出了什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

  1. " fopen()函数"并没有导致内存损坏'也没有失败" free()" (如果事实上你并没有做免费的()。

  2. 您正在验证来自" fopen()"的回复 - 很好问:为什么你还没有检查错误条件的fseek(),ftell(),rewind()和fread()?

  3. 我的猜测是temp[size]=0;可能是导致内存损坏的罪魁祸首。或许fread()。了解"尺寸"肯定会有用。

  4. 建议:

    仔细浏览调试器,并验证您的I / O返回的每一步