Fonction qui retourne une chaine==>libération de la mémoire

Résolu
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 - 22 nov. 2006 à 22:05
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 - 22 nov. 2006 à 22:54
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 nov. 2006 à 22:36
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++
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 nov. 2006 à 22:36
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++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 nov. 2006 à 22:39
BruNews>> A bon? Je croyais que Windows protégait les espaces "libre" (non alloué).

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

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
22 nov. 2006 à 22:54
Ok merçi BruNews (toujours aussi rapide ).
et merçi de la rectification SAKingdom,ct un pti oublie
0
Rejoignez-nous