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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *