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. 😉