5

関数によって返されるポインタであるchar配列に割り当てられたメモリを解放する必要がありchar * getenv( char * )ますか? そして、どちらの方法 - Cfree()または C+ delete []? いいえの場合 - なぜですか?

つまり:

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

ありがとうございました。

4

2 に答える 2

5

元のデータはenviron変数 (char* の配列であり、すべての環境変数とその値を含む) に格納され、対応する変数名のみを検索し、変数getenv()からその値の位置を返すため、environそうしないと、未定義の動作が発生する可能性があります。

于 2010-08-14T14:52:46.573 に答える
4

Getenv は、プロセス環境へのポインターを返します。割り当てを解除する必要はありません。おそらく、割り当てを解除しないことをお勧めします。(delete と free はおそらく何もしないほど賢いですが、環境を破壊するのは良い考えではありません。)

于 2010-08-14T12:52:04.610 に答える