Eliminación de matriz de caracteres devuelto por getenv ()
Pregunta
¿Debo liberar la memoria asignada para la matriz de caracteres, puntero a la que es devuelto por la función char * getenv( char * )
? Y de qué manera - C o C + free()
delete []
? Si no - ¿por qué?
Me refiero a:
char * ptr = getenv( "LS_COLORS" );
cout << ptr << endl;
delete [] ptr; //Is this or free() call needed?
Gracias.
Solución
Los datos originales se almacena en la variable environ
(que es una matriz de char * y contiene todas las variables de entorno con sus valores), getenv()
única búsqueda para el nombre de la variable correspondiente y devuelve la posición de su valor de la variable environ
, por lo que no tiene que liberar, de lo contrario un comportamiento indefinido puede ser producido.
Otros consejos
getenv devuelve un puntero a su entorno de procesos. No tiene por qué ser desasignado, y es probablemente una buena idea para no hacerlo. (Borrado y libre son probablemente lo suficientemente inteligente como para no hacer nada, pero la corrupción de su medio ambiente no es una buena idea.)