2016-12-07 2 views
-2

Je ne suis pas tout à fait sûr ce qui est mal avec mon programme en cours et j'atteindre un peu d'un barrage routier:programme suspendu après avoir essayé de libérer mémoire allouée

(*ptr).Name = (char*)malloc(strlen(record+1)); 
strcpy((*ptr).Name, record); 
free((*ptr).Name); //problem area 

* ptr est un pointeur qui pointe vers une structure qui a divers champs. Après avoir copié des données dans le champ Nom, je veux libérer ma mémoire allouée. Quand je passe à travers mon programme, je ne reçois pas d'erreurs, mais juste un programme suspendu qui ne continuera pas après que j'essaye de libérer la mémoire. Des idées? Je vous remercie.

+1

Nous ne pouvons pas déboguer le code incomplet. Votre problème provient probablement du code non montré. S'il vous plaît fournir un [MCVE] – kaylum

+3

'(* ptr) .Name' est plus communément écrit comme' ptr-> Name' – user3386109

+0

oh wow je n'ai pas vu l'enregistrement + 1 étant incorrect merci. – bodotheguy

Répondre

2
(*ptr).Name = (char*)malloc(strlen(record+1)); //This is the problem! 
strcpy((*ptr).Name, record); 
free((*ptr).Name); //problem area    //Better practice to use free(ptr->Name 

Fix:

ptr->Name = (char*)malloc(strlen(record)+1); //(record+1) in previouse code was doing 
               //the opposite of what it was intended to do 
strcpy(ptr->Name, record); 
free(ptr->Name); 
+2

'ptr ->. Name' devrait être' ptr- > Nom – Barmar