Fuite mémoire [C++] - C++ - Programmation
Marsh Posté le 22-11-2007 à 11:49:22
bah... tu passes ton pointeur en paramètre à ta fonction, et tu gères la mémoire dans la partie principale ?
c'est ce qu'il y a de plus simple en tout cas.
Marsh Posté le 22-11-2007 à 11:50:40
Bah tu le delete ailleurs.
Marsh Posté le 22-11-2007 à 11:53:07
@MagicBuzz : je pense que c'est la bonne solution, je vais voir ca.
@kyntriad : "retour" est défini dans "maFonction()", comment mettre le delete ailleurs ?
Marsh Posté le 22-11-2007 à 13:56:21
le problème est que je n'ai pas une grande liberté sur le code
Marsh Posté le 22-11-2007 à 18:42:10
change de boite, les gens qui font encore des char* en C++ sont vraiment des incompétents
Marsh Posté le 22-11-2007 à 19:17:23
Joel F a écrit : change de boite, les gens qui font encore des char* en C++ sont vraiment des incompétents |
Oui, enfin bon, le meme probleme se pose avec un tableau de int.
Marsh Posté le 22-11-2007 à 19:45:40
ReplyMarsh Posté le 22-11-2007 à 20:30:31
Ace17 a écrit : Je l'attendais celle la ... et au return, on recopie? |
reférences + pas ecrire des interfaces débiles
Marsh Posté le 02-12-2007 à 19:53:40
pas de new sans auto_ptr (ou en tout cas sans RAII):
http://www.gotw.ca/publications/us [...] tively.htm
Code :
|
edit: a oui, pas d'auto_ptr avec des tableaux. Moralite, met un std::string et t'embetes pas.
Marsh Posté le 02-12-2007 à 22:02:49
Joel F a écrit : moralité : boost:smart_array_ptr |
Ah oui c'est sympas ce truc, merci je connaissais pas...
Il n'y a pas de auto_array_ptr ?
(j'ai toujours trouve les auto_*ptr plus simples a utiliser que les shared_*ptr)
Marsh Posté le 03-12-2007 à 08:32:48
http://boost.org/libs/smart_ptr/smart_ptr.htm
De mémoire, les scoped_**_ptr ont la même sémantique que les auto_**ptr.
Marsh Posté le 03-12-2007 à 09:11:15
jojolepingouin a écrit : pas de new sans auto_ptr (ou en tout cas sans RAII): |
J'avoue que je suis assez perplexe par ce genre de truc. Il est vrai que les smart pointer sont des outils puissants mais les utiliser à chaque new, je trouve ça un peu beaucoup : ça reste quand même des objets donc ça bouffe de la mémoire, c'est plus lourd a copier... Dans la boite où j'avais bossé cet été pour mon stage ils avaient fait un RessourceManager et utilisaient des smart pointer dans tout les sens avec plein de copie de shared_ptr... J'avoue que j'ai plutôt été étonné...
Après il est sur qu'avec les pointeurs faut faire doublement gaffe a ce que l'on fait...
vous aussi vous les utilisez aussi intensivement ?
Marsh Posté le 05-12-2007 à 19:22:53
Personnellement, je fais une utilisation très intensives des pointeurs, mais les smart_ptr et autre trucs, jamais. D'ailleurs j'ai jamais vu ce genre de trucs dans des gros projets (genre KDE 4).
A la main : new + delete.
D'ailleurs, pour ton problème, c'est très con :
Code :
|
Et tant qu'à faire, en C++, on n'utilise plus tellement "NULL" qui est un héritage du C, mais directement la valeur 0 (zéro)
Marsh Posté le 05-12-2007 à 22:55:57
en C++ on utilsie std::string surtout
et KDE & co, c'est pas ce que j'appelerais un exemple de bonne pratique de code
Marsh Posté le 06-12-2007 à 20:38:09
Taz a écrit : jète toussa. std::string et ça roule |
Marsh Posté le 07-12-2007 à 10:41:48
Pour info, j'ai réécris le code en utilisant des std::string, et ca ne fuit plus.
Merci à tous pour vos conseils.
Marsh Posté le 22-11-2007 à 11:42:53
Bonjour,
J'ai un programme C++ pour lequel j'ai une fuite mémoire. En le passant sous Valgrind, j'ai repéré ce problème :
char * maFonction()
{
char * retour = new char[255];
retour[0] = '\0';
/* traitements... */
if(retour[0] == '\0')
{
return NULL;
}
else
{
return retour;
}
}
Le soucis est que je ne libère pas la mémoire, il me manque un "delete[] retour;", mais où le placer, étant donné que je veux renvoyer ce pointeur à la fonction appelant "maFonction()" ? En gros, comment libérer un pointeur alloué dynamiquement que l'on veut renvoyer en retour de la fonction ?