Próbáltam gyakorolni a malloc “memóriát és felszabadítani a memóriát, azonban amikor a free () függvényt futtattam ebben a programban hiba érkezik egy érvénytelen mutatóhoz. Meg tudná valaki mondani, hogy mit csinálok rosszul?

Itt van a hiba: * Hiba a `fájlban. / malloc1 “: free (): érvénytelen mutató: 0x000000000216c421 * Megszakítva

És itt vannak a kódom:

include

tartalmazza

int main (void) {// régi fájl megnyitása FÁJL * old_file = fopen (“words.txt”, “r”); if (old_file == NULL) { printf (“Nem található fájl.”); 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); 

}

Válasz

A probléma a fread(&storage, sizeof(char), 1, old_file); pontban rejlik. Ez a sor a közvetlenül a mutatóban tárolt adatokat tárolja, felülírva a malloc “d memória címét. Nem tárolja az adatokat a memóriában, amelyet a mutatóban tárolt cím mutat. Amikor az ingyenes () hívást végrehajtják, érvénytelen címet próbál felszabadítani. Emellett memóriaszivárgást is létrehoz, mert a malloc “d memória címe kicserélődik. Távolítsa el a & fájlt a fread () és az fwrite () fájlokból, és ez működni fog.

Ha ez megválaszolja a kérdését, kérjük, kattintson a pipára az elfogadáshoz. Lépjünk tovább a fórum karbantartásán. 😉

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük