OVH Cloud OVH Cloud

CString alocation memoire pb

3 réponses
Avatar
animax
Bonjour,
Je suis sous Microsoft visual C++.
Voila deux lignes de code C++ qui me paraissent simple, à premiere
vue:

CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free

En principe je doit liberer correctement la memoire, mais ce n'est
bigrement pas le cas.
Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?
Merci
Nicolas

3 réponses

Avatar
Cyrille Szymanski
Le 18-09-2004, nicolas a écrit :
CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free



Le pendant de new n'est pas free() mais delete qui a l'avantage
d'appeler le destructeur.

Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?



Utiliser new avec delete - éventuellement malloc() avec free() en C.
Mais en aucun cas mélanger les deux.

--
cns
Avatar
Luc Hermitte
Cyrille Szymanski wrote in news:slrnckpmf3.b6.cns2
@cns.szym.org:
Le 18-09-2004, nicolas a écrit :
CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free


Le pendant de new n'est pas free() mais delete qui a l'avantage
d'appeler le destructeur.

Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?


Utiliser new avec delete - éventuellement malloc() avec free() en C.
Mais en aucun cas mélanger les deux.



De plus, quel est l'intérêt de créer une chaine de la sorte ? C'est
contre-productif. Tout l'intérêt des wrappers qui enveloppent des
ressources c'est que l'on n'a plus à gérer manuellement ces ressources.


--
Luc Hermitte
Avatar
Patrick Philippot
nicolas wrote:
CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free



Bonjour,

Il est très rare que l'on ait besoin d'allouer dynamiquement une
CString. Cela arrive mais la plupart du temps, on déclare simplement une
instance de CString. Cette classe gère en interne les allocations
mémoire pour les buffers qui contiennent la chaîne et procède à leur
libération au moment de la destruction. Pourquoi se compliquer la vie?

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr