Gestion de la mémoire [Résolu]

Signaler
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Salut,

Je me demandais un truc sur la gestion de la mémoire. Je ne vois pas trop comment l'expliquer simplement et rapidement, voici donc un peu de code :

#include <stdlib.h>
#include
using namespace std;

char * fonction()
{
char * retour = new char[14];
memset(retour,'\0',14);
memcpy(retour,"un petit test",strlen("un petit test"));
return retour;
}

int main()
{
cout<<strlen(fonction())<<endl;
system("PAUSE");
return 0;
}

Alors, ma question est : l'espace alloué à la chaîne par l'appel de fonction() dans le strlen est-il libéré automatiquement ?

Merci

A+

3 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
Non. Il faut que tu libère. D'ailleur je n'aime pas trop ce genre de fonction mais je vais t'aider:

char *chaine = fonction();
cout<<strlen(chaine)<<endl;
delete[] chaine;

D'habitude, la mémoire pour une chaine est alloué avant la fonction le pointeur est passé en paramètre à la fonction. Mais l'exemple ci-dessus fera pareille. C'est seulement moin propre (car plein de delete sans new, on peut ce perdre dans ça)

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

En fait je ne savais pas si je devais passer par une variable intermediaire ou pas. Apparamment oui.

Re merci :)

A+
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tant qu'on y est, autant préciser que c'est très mauvais de faire ca, car en génréal tu oubliera de libérer ta mémoire quand elle est allouée dans une fonction sans y être libérée