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