调用fopen会在运行时产生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. "fopen()"没有导致内存损坏,"free()"也没有失败(如果你没有使用free().

  2. 您正在验证"fopen()"的返回值——好。问:为什么不检查fseek()、ftell()、rewind()和read()是否有错误?

  3. 我猜temp[size]=0;可能是导致内存损坏的罪魁祸首。或者是fread()

建议:

仔细地遍历调试器,并验证每一步的I/O返回

相关内容

  • 没有找到相关文章

最新更新