Jag försökte öva malloc ”och frigöra minne, men när jag kör funktionen free () i detta program ett fel returneras för en ogiltig pekare. Kan någon berätta vad jag gör fel?

Här är felet: * Fel i `. / malloc1 ”: gratis (): ogiltig pekare: 0x000000000216c421 * Avbruten

Och här är min kod:

inkluderar

inkludera

int main (void) {// öppna en gammal fil FIL * old_file = fopen (”words.txt”, ”r”); if (old_file == NULL) { printf (”Ingen fil hittades.”); returnera 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); Den här raden lagrar data som läses direkt i pekaren och skriver över adressen till malloc-minnet. Den lagrar inte data i minnet som pekaren adresserar till. I det kostnadsfria () samtalet försöker det frigöra en ogiltig adress. Det skapar också en minnesläcka eftersom adressen till malloc ”d-minnet byts ut. Ta bort & från fread () och fwrite () så fungerar det.

Om detta svarar på din fråga, klicka på kryssrutan för att acceptera. Låt oss fortsätta med forumunderhållet. 😉

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *