7

を呼び出した後getpwuid(uid)、ポインターへの参照を取得します。もう使用しない場合は、そのポインターを解放する必要がありますか? マニュアルページを読むと、同じ関数への後続の呼び出しによって上書きされる可能性のある静的領域を参照していると書かれているため、そのメモリ領域に触れるべきかどうかわかりません。

ありがとう。

4

3 に答える 3

10

いいえ。結果を解放する必要はありません。free(3) は、malloc(3)、calloc(3)、または realloc(3) でヒープに割り当てられたポインターに対してのみ呼び出すことができます。

静的データは、プログラムのデータまたは bss セグメントの一部であり、プロセスが終了する (または exec(2) によって上書きされる) まで存続します。

于 2008-10-02T00:04:07.627 に答える
5

*_r関数 ( ) をスレッド セーフ (再入可能) 関数に使用getpwuid_r()して、返された情報を配置するためのバッファー スペースを提供できるようにします。成功または失敗については、errno を確認してください。再入可能関数を使用しない場合は、関数が解放する必要のないデータを返すと安全に想定できますが、同じ関数を連続して呼び出すと上書きされます。

于 2008-10-02T13:22:28.253 に答える
1

実際には、既存の構造体へのポインターを返すため、解放しないでください。

于 2008-10-02T00:03:33.417 に答える