2010-08-14 5 views
5

Dois-je libérer la mémoire allouée au tableau char, pointeur vers lequel la fonction char * getenv(char *) renvoie-t-elle? Et de quelle manière - C free() ou C + delete []? Si non - pourquoi?Suppression du tableau char retourné par getenv()

Je veux dire:

char * ptr = getenv("LS_COLORS"); 
cout << ptr << endl; 
delete [] ptr; //Is this or free() call needed? 

Merci. Getenv renvoie un pointeur vers votre environnement de processus.

Répondre

5

Les données d'origine sont stockées dans la variable environ (qui est un tableau de char * et contient toutes les variables d'environnement avec leurs valeurs), getenv() uniquement rechercher le nom de variable correspondant et renvoie la position de sa valeur à partir de la variable environ, vous n'avez donc pas à le libérer, sinon un comportement indéfini peut se produire.

4

Getenv renvoie un pointeur vers votre environnement de processus. Il n'a pas besoin d'être désaffecté, et c'est probablement une bonne idée de ne pas le faire. (supprimer et libérer sont probablement assez intelligents pour ne rien faire, mais la corruption de votre environnement n'est pas une bonne idée.)

+2

Je ne ferais pas confiance à la suppression ou au fait d'être libre "assez intelligent pour ne rien faire". – TheUndeadFish