Încercam să practic mallocarea și eliberarea memoriei, totuși când rulez funcția free () în acest program este returnată o eroare pentru un indicator nevalid. Poate cineva să-mi spună ce „fac greșit?

Aici este eroarea: * Eroare în`. / malloc1 „: free (): indicator nevalid: 0x000000000216c421 * Abortat

Și aici este codul meu:

include

include

int main (void) {// deschideți un fișier vechi FILE * vechi_fișier = fopen („cuvinte.txt”, „r”); dacă (vechi_fișier == NULL) { printf („Nu s-a găsit niciun fișier.”); 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); 

}

Răspuns

Problema rezidă în fread(&storage, sizeof(char), 1, old_file); Această linie stochează datele citite direct în pointer, suprascriind adresa memoriei malloc „d. Nu stochează datele în memoria indicată de adresa stocată în pointer. Când se execută apelul free (), încearcă să elibereze o adresă nevalidă. De asemenea, creează o scurgere de memorie, deoarece adresa malloc „d memory este înlocuită. Eliminați & din fread () și fwrite () și va funcționa.

Dacă acest lucru răspunde la întrebarea dvs., vă rugăm să faceți clic pe bifa pentru a accepta. Să continuăm cu întreținerea forumului. 😉

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *