Snažil jsem se procvičovat malloc a uvolnění paměti, ale když v tomto programu spustím funkci free () je vrácena chyba pro neplatný ukazatel. Může mi někdo říct, co dělám špatně?

Tady je chyba: * Chyba v `. / malloc1 „: free (): invalid pointer: 0x000000000216c421 * Zrušeno

A tady je můj kód:

zahrnout

zahrnout

int main (void) {// otevřít starý soubor FILE * old_file = fopen („words.txt“, „r“); if (old_file == NULL) { printf („Nebyl nalezen žádný soubor.“); návrat 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); 

}

Odpověď

Problém spočívá v fread(&storage, sizeof(char), 1, old_file); Tento řádek ukládá data načtená přímo do ukazatele a přepíše adresu paměti malloc „d. Neukládá data do paměti, na kterou ukazuje adresa uložená v ukazateli. Když je provedeno volání free (), pokouší se uvolnit neplatnou adresu. Vytváří také únik paměti, protože se nahrazuje adresa paměti malloc „d. Odstraňte & z fread () a fwrite () a bude fungovat.

Pokud to odpovídá na vaši otázku, přijměte prosím zaškrtnutím políčka. Pokračujeme v údržbě fóra. 😉

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *