begin process at 2012 05 29 12:00:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Free() veut pas désallouer....


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Free() veut pas désallouer....

vendredi 9 juin 2006 à 09:43:28 | Free() veut pas désallouer....

benlustr

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 !

vendredi 9 juin 2006 à 09:59:11 | Re : Free() veut pas désallouer....

benlustr

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.
vendredi 9 juin 2006 à 10:13:01 | Re : Free() veut pas désallouer....

vecchio56

Administrateur CodeS-SourceS
Normalement le free devrait désallouer... Par contre, pourquoi retourner une valeur qui correspond à de la mémoire libérée?
vendredi 9 juin 2006 à 10:57:31 | Re : Free() veut pas désallouer....

PoFMaN

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 :) )
vendredi 9 juin 2006 à 11:05:37 | Re : Free() veut pas désallouer....

DeAtHCrAsH

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
vendredi 9 juin 2006 à 12:01:30 | Re : Free() veut pas désallouer....

benlustr

Réponse acceptée !
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



Cette discussion est classée dans : p1, p2, free, float, malloc


Répondre à ce message

Sujets en rapport avec ce message

ponté sur une valeur pour l'éliminé [ par sturnarbo ] énoncé:/*Ecrire un programme qui lit un entier X et un tableau A du type int au clavieret élimine toutes les occurrences de X dans A en tassant les él un tableaux de permutation [ par sturnarbo ] /*Ecrire un programme qui range les éléments d'un tableau A du type int dansl'ordre inverse. Le programme utilisera des pointeurs P1 et P2 et une vari sturnarbo [ par sturnarbo ] ENONCE:/*Ecrire un programme qui range les éléments d'un tableau A du type int dansl'ordre inverse. Le programme utilisera des pointeurs P1 et P2 et u Probleme d'allocation de mémoire dynamique (malloc/free) [ par PhantomPowaa ] Bonjour,J'ai un petit probleme avec les fonctions malloc et free dans certains de mes programmes. Apparement le malloc s'effectue correctement, mais a problème c++ [ par cricri nature ] Je veux multiplier 2 polynomes p1 et p2. Pour cela, j'ai créer 2 tableaux : tab[] qui stocke les degrés d'un monome et liste_monome[] qui stocke diffé problème multiplication [ par cricri nature ] Je veux multiplier 2 polynomes p1 et p2. Pour cela, j'ai créer 2 tableaux : tab[] qui stocke les degrés d'un monome et liste_monome[] qui stocke diffé pb malloc ss linux [ par Ricool ] Salutje suis en train de faire un petit prog qui manipule des matrices, mais de temps en temps pr creer une matrice le prog plante ("segmentation faul Tableaux a 2 dimensions [ par AsM0DeUz ] 'lut !Je tente de comprendre les tableaux a 2 dimensions en me servant d'un tableau de pointeurs. Seulement lorsque je me documente sur le net, je ten Interpolation de lagrange (suite et surtout fin) [ par highvoltage ] Bonjour à tous et à toutes (si il y en a ),j'ai créer un nouveau post suite à un précédent car le problème est carrément différent: au départ on était utilisation de la stl vector + la stl pair [ par anthony65 ] Bonjour,je voudrais savoir comment je peux lire les elements qui se trouve dans mon vector.Dans mon vector j'ajoute des pair, mon probleme est que je


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales