Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2253 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Probleme de libération de mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Probleme de libération de mémoire

n°281089
Mokett
Posté le 07-01-2003 à 14:45:14  profilanswer
 


J'ai un objet A qui contient un pointeur (un tableau), donc dans le destructeur je libere ce tableau. Ca plante parce que plusieurs pointeurs dans  l'objets A pointent sur le meme tableau (c'est pas voulu)
 
Donc  j'ai   surcharger l'opérateur = pour que il ne copie pas le pointeur mais crée un nouveau tableua identique au premier.
Mais il y a toujours plusieurs pointeurs avec la meme valeur (donc ça merde ).
 
Que faire ??  
 
(quand on passe un object en paramètre d'une fonction, il utilise bien = ?)

mood
Publicité
Posté le 07-01-2003 à 14:45:14  profilanswer
 

n°281093
Taz
bisounours-codeur
Posté le 07-01-2003 à 14:51:05  profilanswer
 

un morceau de code? peut etre devrais tu utiliser les std::vector<>

n°281096
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-01-2003 à 14:55:09  profilanswer
 

Dis moi si je comprends bien : tu as dans ta classe une variable membre qui est un pointeur vers un tableau membre ?
Quand tu détruis l'objet, forcément tu libères le tableau (j'espère en tout cas). Il suffit donc de rajouter la ligne
 
pointeur = NULL;
 
dans le destructeur
 
mais je doute que ce soit aussi simple. poste ton code si tu peux


---------------
J'ai un string dans l'array (Paris Hilton)
n°281104
Mokett
Posté le 07-01-2003 à 15:07:21  profilanswer
 

je ne peux pas poster le code , y'en a vraiment trop long (ça fait 3 ans que je suis dessus....j'avais laissé tomber cette désallocation, mais là ya besoin.)
 
Je fait exactement ce que tu dis Harkonnen.
 
Le problème est qu'à certains moments cette objet est copié (explicitement ou par le c++ (genre quand j'en passe un en paramètre de fonction) et que ce pointeur ce retrouve dupliqué dans plusieurs objets (donc dès qu'il y a un de ces objets qui est libéré, ceux qui ont le même pointeur plantent (normal)) .  
 
Pourtant j'ai bien surchargé operator= pour qu'il ne copie pas le pointeur mais alloue un nouveau tableau.

n°281105
Mokett
Posté le 07-01-2003 à 15:10:06  profilanswer
 

En fait ma question est :  
 
la surcharge de operator= est suffisante pour que ça marche si le reste est bien codé ?

n°281106
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 07-01-2003 à 15:10:37  profilanswer
 

mokett a écrit :


J'ai un objet A qui contient un pointeur (un tableau), donc dans le destructeur je libere ce tableau. Ca plante parce que plusieurs pointeurs dans  l'objets A pointent sur le meme tableau (c'est pas voulu)
 
Donc  j'ai   surcharger l'opérateur = pour que il ne copie pas le pointeur mais crée un nouveau tableua identique au premier.
Mais il y a toujours plusieurs pointeurs avec la meme valeur (donc ça merde ).
 
Que faire ??  
 
(quand on passe un object en paramètre d'une fonction, il utilise bien = ?)


 
Attention à pas confondre le contructeur de copie A(const A&) et l'operateur d'assignation operator=(const A&). Et si ton objet doit se trimballer des pointeurs alloués t'as intérêt à toujours définir les deux ! En l'occurence les paramètres de la fonction sont des objets temporaires créés pour l'occasion: c'est le constructeur de copie qui est utilisé.
 
Sinon le plus simple c'est de stocker ton tableau dans un std::vector, le résultat est le même sauf que tu ne t'occupe plus de faire les free et les delete
 

n°281108
Taz
bisounours-codeur
Posté le 07-01-2003 à 15:18:10  profilanswer
 

on peut aussi définir operator= enfonction d'une fonction membre swap qui fait alors appel au constructeur de recopie

n°281111
Mokett
Posté le 07-01-2003 à 15:23:12  profilanswer
 

Captain ad-hoc a écrit :


 
Attention à pas confondre le contructeur de copie A(const A&) et l'operateur d'assignation operator=(const A&). Et si ton objet doit se trimballer des pointeurs alloués t'as intérêt à toujours définir les deux ! En l'occurence les paramètres de la fonction sont des objets temporaires créés pour l'occasion: c'est le constructeur de copie qui est utilisé.
 
Sinon le plus simple c'est de stocker ton tableau dans un std::vector, le résultat est le même sauf que tu ne t'occupe plus de faire les free et les delete
 
 


 
merci c'est surement ça.

n°281116
Mokett
Posté le 07-01-2003 à 15:28:54  profilanswer
 

Ok c'est bon merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Probleme de libération de mémoire

 

Sujets relatifs
--> Probleme pour recupérer une valeur dans une liste ! HELP !!!!! <--Gestion de la memoire virtuelle, winXP
Problème d'ImpressionProbleme de retour d'un servlet vers un jsp
problème étrange lors de la génération de mon code HTMLProbleme de comil avec wxWindows
[java] probleme de popup avec dreamweaverProblème avec la fonction mail()
[VB] Problême avec ToolBar et ImageListLinux, DSL, Open GL et drivers Nvidia : Probleme
Plus de sujets relatifs à : [C++] Probleme de libération de mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR