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