Gestion de la mémoire

Résolu
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012 - 12 juin 2006 à 14:51
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 12 juin 2006 à 18:20
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 juin 2006 à 15:10
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
3
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
12 juin 2006 à 15:20
En fait je ne savais pas si je devais passer par une variable intermediaire ou pas. Apparamment oui.

Re merci :)

A+
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juin 2006 à 18:20
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
0
Rejoignez-nous