2010-08-14 36 views
5

Sollte ich den Speicher für die Char-Array, Zeiger, auf die von der char * getenv(char *) Funktion zurückgegeben wird freigegeben? Und welchen Weg - C free() oder C + delete []? Wenn nein - warum?Löschen von char-Array zurückgegeben von getenv()

ich meine:

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

Danke.

Antwort

5

Die ursprünglichen Daten sind in der environ Variable gespeichert (das ist ein Array von char * und enthält alle Umgebungsvariablen mit ihre Werte), getenv() suchen nur nach dem entsprechenden Variablennamen und geben die Position ihres Wertes aus der Variablen environ zurück, so dass Sie sie nicht freigeben müssen, da sonst undefiniertes Verhalten auftreten kann.

4

Getenv gibt einen Zeiger auf Ihre Prozessumgebung zurück. Es muss nicht freigegeben werden, und es ist wahrscheinlich eine gute Idee, dies nicht zu tun. (Löschen und Frei sind wahrscheinlich schlau genug, um nichts zu tun, aber Ihre Umgebung zu schädigen ist keine gute Idee.)

+2

Ich würde kein Vertrauen in löschen oder frei sein "schlau genug, um nichts zu tun". – TheUndeadFish