Jessayais de pratiquer le malloc « ing et de libérer de la mémoire, cependant lorsque jexécute la fonction free () dans ce programme une erreur est renvoyée pour un pointeur non valide. Quelquun peut-il me dire ce que je « fais mal?

Voici lerreur: * Erreur dans`. / malloc1 « : free (): pointeur invalide: 0x000000000216c421 * Aborted

Et voici mon code:

include

include

int main (void) {// ouvre un ancien fichier FILE * old_file = fopen (« words.txt », « r »); if (old_file == NULL) { printf (« Aucun fichier trouvé. »); 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éponse

Le problème réside dans fread(&storage, sizeof(char), 1, old_file); Cette ligne stocke les données lues directement dans le pointeur, écrasant ladresse de la mémoire de malloc « d. Il ne stocke pas les données dans la mémoire pointée par ladresse stockée dans le pointeur. Lorsque lappel free () est exécuté, il essaie de libérer une adresse invalide. Cela crée également une fuite de mémoire car ladresse de la mémoire malloc « d est en cours de remplacement. Supprimez le & de fread () et fwrite () et cela fonctionnera.

Si cela répond à votre question, veuillez cliquer sur la coche pour accepter. Continuons la maintenance du forum. 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *