Fonction free en c

Fermé
wogkiller Messages postés 7 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 7 mars 2004 - 7 mars 2004 à 12:58
scoubidou944 Messages postés 719 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 13 oct. 2004 à 02:13
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

langage c
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
7 mars 2004 à 22:03
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
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
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
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 mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 127
13 oct. 2004 à 02:13
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