Fonction free en c

wogkiller Messages postés 7 Statut Membre -  
scoubidou944 Messages postés 728 Statut Membre -
bonjour j'ai un pb avec la fonction free ds un programme il me dit erreur de segmentation lorsque je le lance alor que ds le source j'ai écrit :
T-cod *boite,*elv;
...
elv = ( T_cod *)malloc(...);
...
free(elv);
et l'eereur vien aparamen du elv qu'il veut pa ds le malloc et la je comprend pa!!!!!
merci pour toute aide
A voir également:

6 réponses

asma ramda
 
langage c
0
tafiscobar Messages postés 1281 Statut Contributeur 177
 
si t'es sure que elv n'est pas supprimé ds ton prog avant le free, alors l'erreur ne vient pas de ce free, mais d'un autre accés non autorisé.

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
0
Jérémy
 
malloc renvoit un void * donc il faut que ton T_COD soit un typedef de void (ou de void * dans ce cas la c'est T_COD malloc)

Mais je vois pas pourquoi tu t'embetes avec ca, il suffirait de faire :

void *malloc(int);

elv = malloc(...);
free(elv);

--
Jérémy
0
tudji
 
a mon avis il suffit de faire

T-cod *boite,*elv;
...
elv = malloc(...*( T_cod *)); //avec ... un int
...
free(elv);
0

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

Posez votre question
Guki
 
Salut!

Juste par hasard c'est une faute de frappe T-cod? Parce que le tiret n'est pas un char autorisé dans le nom d'une variable. Si j'ai bonne mémoire c'est juste des char alphanumériques et le underscore. Si le problème persiste donne une portion du code plus importante ça permettrait d'observer de plus pres où ça coince.
0
scoubidou944 Messages postés 728 Statut Membre 127
 
autre effet de bord si tu es sur que personne libere ton emplacement entre ton malloc et ton free, es-tu sur de pas avoir un débordement de tableau quelque part.

Dis toi que lorsque tu alloue 31 octets, deja au niveau des allocations, il va aligner sur une adresse paire.
Ensuite il risque de prendre le chiffre pair suivant (32), ou bien la base de 2 suivante (32 ou 64 éventuellement)
maintenant ton free, tu indiques pas la taille à libérer, C donc qu'il la stocke quelque part... genre 4 octets avant par exemple.

Maintenant si dans ta pile tu as un tableau de n indice et que tu écrase à l'indice n, tu sors D limites [0..n[, tu risques d'écraser des données et donc ta zone à libérer peut donc aovir une nouvelle taille de 0, -15....

Si ton pb est pas résolu, poste tt le code si C pas trop long.

Y'a des jours où il faut pas m'chercher. 
Et y'a des jours tous les jours.
0