当加载二进制文件时,当前数据丢失

问题描述 投票:0回答:1

有些代码是由于电晕爆发而由我的老师提供的,他没有回答我被困的电子邮件。

他提供的代码是这个

printf("Removing old data in array...");                
free(myCities);                                 
myCities = readFromBinFile(&nrOfCitiesAdded);    
...

struct city *readFromBinFile(int *nrOfCities){    
    struct city *temp = NULL; 
    FILE *fp = fopen("/Users/cul01/Desktop/minTextFil","rb"); 
    if(fp == NULL)
        printf("Could not open file\n");    
    else {
        printf("Reading from file...\n");       
        fread(nrOfCities, sizeof(int), 1, fp);       
        temp = (struct city*)calloc(*nrOfCities, sizeof(struct city));       
        if(temp == NULL)             
            printf("Error allocating memory");        
        else           
            fread(temp, sizeof(struct city), *nrOfCities, fp);
    }   
    fclose(fp); 
    return temp; 
} 

现在一切正常,但是当我添加一个城市,然后尝试加载一个不存在的文件,然后添加另一个城市,然后打印出来时,我得到了类似9e 10267 iles\Common manch的内容,但另一个城市很好只是第一个被卡住的。如果需要更多代码,我很乐意提供。

c arrays file struct dynamic
1个回答
0
投票

释放readFromBinFile()之前先呼叫myCities。如果返回NULL,则保留旧值。

int tempCitiesAdded;
struct city *citiesTemp = readFromBinFile(&tempCitiesAdded);
if (citiesTemp) {
    free(myCities);
    myCities = citiesTemp;
    nrOfCitiesAdded = tempCitiesAdded;
}
© www.soinside.com 2019 - 2024. All rights reserved.