Jeg prøvede at øve mig på at frigøre hukommelse, men når jeg kører funktionen free () i dette program en fejl returneres for en ugyldig markør. Kan nogen fortælle mig, hvad jeg laver forkert?

Her er fejlen: * Fejl i `. / malloc1 “: gratis (): ugyldig pointer: 0x000000000216c421 * Afbrudt

Og her er min kode:

inkluderer

inkluderer

int main (ugyldigt) {// åbn en gammel fil FIL * old_file = fopen (“words.txt”, “r”); hvis (old_file == NULL) { printf (“Ingen fil fundet.”); returner 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 linje lagrer de data, der læses direkte i markøren, og overskriver adressen på malloc hukommelsen. Det lagrer ikke dataene i hukommelsen, som adressen gemt i markøren peger på. Når det gratis () opkald udføres, prøver det at frigøre en ugyldig adresse. Det skaber også en hukommelseslækage, fordi adressen på malloc “d-hukommelsen udskiftes. Fjern & fra fread () og fwrite (), så fungerer den.

Hvis dette besvarer dit spørgsmål, skal du klikke på fluebenet for at acceptere. Lad os holde øje med forumvedligeholdelse. 😉

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *