Free() veut pas désallouer.... [Résolu]

Signaler
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006
-
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006
-
Bonjour à tous, c'est encore moi

Dans une fonction, j'ai deux pointeurs qui s'incrémentent dans une boucle. à la fin de la fonction, je libère les zones mémoires correspondantes que j'ai allouées avec malloc. Ensuite, je renvoie l'adresse qui correspond à l'une des zones mémoire. C'est au moment du return que j'ai un message du genre 'violation de l'adresse......'.
voici le code en gros :

float *p1, *p1_i, *p2;

p1 = (float*)malloc(512*512*sizeof(float));
p1_i = p1;

p2 = (float*)malloc(512*512*sizeof(float));

for(....)
{
p1++;
p2++;
}

free(p1);
free(p2);

return(p1_i); //Ici, il s'agit bien de l'adresse qui a été renvoyée à l'origine par malloc.

voilà, si vous avez une idée, je suis preneur. Merci à vous !

5 réponses

Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006

Oui c'est ça,désormais, je fais un free sur le pointeur qui reçoit le résultat de cette fonction. ça marche impec
Merci bien
Messages postés
32
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
5 juillet 2006

float *p1, *p1_i, *p1returned, *p2, p2_i;

p1 = (float*)malloc(512*512*sizeof(float));     //pointeur que je vais incrémentrer
p1_i = p1;                                                       //Ici, je conserve l'adresse d'origine, pour désallouer

p1returned = p1;                                             //Ici, je
garde l'adresse d'origine, celle que je vais retourner à la fin

p2 = (float*)malloc(512*512*sizeof(float));
p2_i = p2;

for(....)
{
p1_i++;
p2_i++;
}

free(p1);
free(p2);

return(p1_returned); //Ici, il s'agit bien de l'adresse qui a été renvoyée à l'origine par malloc.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Normalement le free devrait désallouer...
Par contre, pourquoi retourner une valeur qui correspond à de la mémoire libérée?
Messages postés
58
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
21 juin 2006

Salut,

le message 'violation de l'adresse......' pour moi ne veu pas dire que free() n'a pas désalloué, au contraire. A mon avis tu as cette erreur parce que tu essaye de retourner une adresse mémoire qui a été libérée (ca m'étonnerai mais j'ai jamais essayé), ou parce que tu essaye de faire quelque chose avec cette adresse une fois que tu l'as retournée.

Et moi non plus je vois pas à quoi ca sert de retourner une adresse mémoire qui a été libérée.

Et au passage je vois pas non plus lma différence entre p1 et p1_returned (a part le nom :) )
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Une fois sortie de ta fonction, ton pointeur ne vaut plus rien.
 Pas étonnant que ton soft plante si tu essayes de travailler sur cette adresse retournée!

Shell