Fonction qui retourne une chaine==>libération de la mémoire [Résolu]

Signaler
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
-
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
-
Bonsoir,
J'ai eu besoin d'utiliser une fonction me retournant une chaine,après mes recherches sur cpp france j'ai trouvé la syntaxe suivante:

char* Fonction();
{
char* texte=new char[64];
strcpy(...);
//delete texte;!!!!
return texte;
}

Je pensai que le fait de rajouter delete m'empecherai de récuperer ma chaine (car celle ci vient d'etre détruite),mais en faisant le teste je me suis apperçu que non.
Pourquoi?La mémoire alloué par texte est elle alors libérée?
Merçi d'av pour vos réponses

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
la mémoire est marquée 'libre' mais si rien ne vient remplacer la valeur des octets à cet emplacement tu pourras lire ce que tu attendais.
Pour autant il ne faut pas procéder ainsi, sur un gros prog tu es quasi certain que les valeurs de la chaine seront écrasées.

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
delete[] texte;
pour supprimer un tableau. La mémoire devrais être désalloué et le pointeur invalide. Si tu veux retourner un pointeur, tu peux le prendre en argument de la fonction:

char* Fonction(char *texte);
{
    strcpy(...);
    return texte;
}

Tu alloue donc la mémoire avant l'utilisation de la fonction et la libère après. Pas de confusion.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
BruNews>> A bon? Je croyais que Windows protégait les espaces "libre" (non alloué).

C++ (@++)<!--
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
nenni, tout TON espace user (2 Go) est accesssible en lecture.

ciao...
BruNews, MVP VC++
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
Ok merçi BruNews (toujours aussi rapide ).
et merçi de la rectification SAKingdom,ct un pti oublie