Pb avec la fonction free en C

cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005 - 19 mai 2004 à 15:25
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005 - 24 sept. 2004 à 10:24
Bonjour,

J'ai un problème lorsque je souhaite libérer une chaîne de caractère et je ne trouve pas la réponse dans le forum bien que le sujet ait déjà été abordé.

Voilà le code que j'ai :

sha1 = (char*)malloc(20*sizeof(char)+1);

[ ou sha1 = (char*)malloc(sizeof(char*));]

...
...
... opérations avec sha1 où je lui affecte une chaine de caractère de 20 octets....
...
...

free( sha1 );

et sur le free( sha1 ), j'ai une grosse erreur qui arrête le programme.

Merci d'avance pour votre aide,

Cako19

12 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 mai 2004 à 15:35
sha1 = (char*)malloc(21); est bon si tu ne modifies pas sha1 ulterieurement, genre sha1++ ou autre.
free(sha1); doit passer.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
19 mai 2004 à 15:50
Malheureusement ça ne marche pas et je ne sais pas si je modifie sha1 car la valeur est retournée par une fonction appartenant à une dll.
Du coup en fait, je ne pense pas que sha1 à proprement parlé est modifié.

Mais si jamais sha1 était modifié, comment faire pour libérer la mémoire ?

Merci en tout cas pour ta réponse BruNews !!

Cako19
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2004 à 17:16
il faut que tu sauvegarde sha1 au moment de l'affectation:
char* old sha1 (char*)malloc(21);
//utilisation de sha1
free(old);
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 mai 2004 à 20:19
char* old = sha1 = malloc(21);

tout simplement, la conversion void* -> char* est implicite
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2004 à 20:27
char* sha1;char* old sha1 malloc(21);
-->
error C2440: '=' : impossible de convertir de 'void *' en 'char *'
La conversion de 'void*' en pointeur vers non 'void' nécessite un cast explicite
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2004 à 20:28
je parie que c'est parce que je suis en C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 mai 2004 à 20:31
sans doute, compile avec gcc ou dans ton mode C
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
24 mai 2004 à 09:45
La copie du pointeur ne change rien à mon pb. J'ai toujours une erreur lorsque je le libère.
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
24 mai 2004 à 12:04
Désolée pour le nombre de message précédents, je croyais que c'était planté :)

Voici en gros mon code

char* sha1;
sha1 = malloc(21);
...

char* sha1_bis= sha1;

//utilisation de la fonction qui modifie sha1_bis
EcritureSha1( sha1_bis, adresseDepart, NomFichierH86, 0, sErreur );
...

free(sha1);

et ceci fait planter mon programme.

Help please, je ne vois pas ce qui ne va pas.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 mai 2004 à 19:53
si le free plante c'est que :

soit ce que pointe sha1 a deja ete liberé

soit tu a perdu la valeur de sha1 en cour de route

montre un plus de code stp
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 mai 2004 à 22:42
est-tu bien sur que c'est le free qui plante?
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
24 sept. 2004 à 10:24
En fait, je ne pouvais pas utiliser free parce que le pointeur avait été modifié, je crois.

Merci pour votre aide à tous !
0
Rejoignez-nous