2010-08-14 17 views
5

¿Debo liberar la memoria asignada para la matriz de caracteres, cuyo puntero devuelve la función char * getenv(char *)? Y de qué manera - C free() o C + delete []? Si no, ¿por qué?Eliminación de la matriz de caracteres devuelta por getenv()

quiero decir:

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

Gracias.

Respuesta

5

Los datos originales se almacenan en la variable environ (que es una matriz de caracteres * y contiene todas las variables de entorno sus valores), getenv() solo busca el nombre de la variable correspondiente y devuelve la posición de su valor de la variable environ, por lo que no tiene que liberarlo, de lo contrario, puede ocurrir un comportamiento indefinido.

4

Getenv devuelve un puntero al entorno de procesos. No necesita ser desasignado, y probablemente sea una buena idea no hacerlo. (Eliminar y liberar son probablemente lo suficientemente inteligentes como para no hacer nada, pero corromper el entorno no es una buena idea.)

+2

No pondría ninguna fe en eliminar o en ser libre "lo suficientemente inteligente como para no hacer nada". – TheUndeadFish

Cuestiones relacionadas