Ik probeerde malloc “te oefenen en geheugen vrij te maken, maar toen ik de functie free () in dit programma uitvoerde er wordt een fout geretourneerd voor een ongeldige pointer. Kan iemand me vertellen wat ik “verkeerd doe?
Hier is de fout: * Fout in`. / malloc1 “: free (): invalid pointer: 0x000000000216c421 * Afgebroken
En hier is mijn code:
include
include
int main (void) {// open een oud bestand FILE * old_file = fopen (“words.txt”, “r”); if (old_file == NULL) { printf (“No file found.”); 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);
}
Antwoord
Het probleem ligt in fread(&storage, sizeof(char), 1, old_file);
Deze regel slaat de gegevens direct op in de pointer, waarbij het adres van het malloc “d geheugen wordt overschreven. Het slaat de gegevens niet op in het geheugen waarnaar wordt verwezen door het adres dat is opgeslagen in de pointer. Wanneer de aanroep free () wordt uitgevoerd, probeert het een ongeldig adres vrij te maken. Het veroorzaakt ook een geheugenlek omdat het adres van het malloc “d-geheugen wordt vervangen. Verwijder de &
uit fread () en fwrite () en het zal werken.
Als dit uw vraag beantwoordt, klik dan op het vinkje om te accepteren. Laten we doorgaan met het onderhoud van het forum. 😉