Fonction free en c

wogkiller Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
scoubidou944 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   -
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 1277 Date d'inscription   Statut Contributeur Dernière intervention   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 719 Date d'inscription   Statut Membre Dernière intervention   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