Jeg prøvde å øve meg på å frigjøre minne, men når jeg kjører gratis () -funksjonen i dette programmet en feil returneres for en ugyldig peker. Kan noen fortelle meg hva jeg gjør galt?
Her er feilen: * Feil i `. / malloc1 «: gratis (): ugyldig peker: 0x000000000216c421 * Avbrutt
Og her er koden min:
inkluderer
inkluderer
int main (void) {// åpne en gammel fil FIL * old_file = fopen («words.txt», «r»); if (old_file == NULL) { printf («Ingen fil funnet.»); return 1;}
//open a new file FILE* new_file = fopen("new_words.txt", "w"); if (new_file == NULL) { printf("Unable to create file."); return 2; } for (int i = 0; i < 21; i++) { char* storage = malloc(sizeof(char)); if (storage == NULL) { printf("Error."); return 3; } fread(&storage, sizeof(char), 1, old_file); fwrite(&storage, sizeof(char), 1, new_file); free(storage); } //close both files fclose(old_file); fclose(new_file);
}
Svar
Problemet ligger i fread(&storage, sizeof(char), 1, old_file);
Denne linjen lagrer data som er lest direkte i pekeren, og overskriver adressen til malloc-minnet. Den lagrer ikke dataene i minnet som adressen som er lagret i pekeren, peker på. Når gratis () samtalen blir utført, prøver den å frigjøre en ugyldig adresse. Det skaper også en minnelekkasje fordi adressen til malloc «d-minnet byttes ut. Fjern &
fra fread () og fwrite () så fungerer det.
Hvis dette svarer på spørsmålet ditt, kan du klikke på haken for å godta. La oss fortsette med forumvedlikehold. 😉