при загрузке двоичного файла текущие данные теряются - PullRequest
0 голосов
/ 19 марта 2020

Часть кода предоставлена ​​моим учителем из-за вспышки короны, и он не отвечает на электронные письма, которые я застрял.

Код, который он предоставил, был таким:

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, но другой город в порядке, это только первый, который застрял. Если требуется больше кода, я с удовольствием предоставлю его.

1 Ответ

0 голосов
/ 19 марта 2020

Звоните readFromBinFile() до освобождения myCities. Если возвращается NULL, сохраните старое значение.

int tempCitiesAdded;
struct city *citiesTemp = readFromBinFile(&tempCitiesAdded);
if (citiesTemp) {
    free(myCities);
    myCities = citiesTemp;
    nrOfCitiesAdded = tempCitiesAdded;
}
...