2010-08-14 2 views
5

char * getenv(char *) 함수에 의해 반환되는 포인터가 char 배열에 할당 된 메모리를 해제해야합니까? 그리고 어떤 방법으로 - C free() 또는 C + delete []? 없다면 - 왜?getenv()에 의해 반환 된 문자 배열을 삭제

는 말은 :

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

감사합니다.

답변

5

원본 데이터는 environ 변수 (char * 배열이며 모든 환경 변수를 포함 함)에 저장됩니다. 해당 값), getenv()은 해당 변수 이름 만 검색하고 environ 변수에서 해당 값의 위치를 ​​반환하므로 해제 할 필요가 없습니다. 그렇지 않으면 정의되지 않은 동작이 발생할 수 있습니다.

4

Getenv는 프로세스 환경에 대한 포인터를 반환합니다. 할당을 해제 할 필요는 없으며 그렇게하지 않는 것이 좋습니다. (삭제 및 무료는 아마도 아무 일도하지 않을 정도로 똑똑하지만 환경을 손상시키는 것은 좋은 생각이 아닙니다.)

+2

나는 "아무것도 할 수 없을 정도의 똑똑한"삭제 나 자유에 대한 어떤 믿음도 두지 않을 것입니다. – TheUndeadFish