getpwuid(uid)を呼び出した後、ポインタへの参照があります。私はもうそれを使用しないときにそれを解放すべきですか?マニュアルページを読むと、同じ関数へのその後の呼び出しで上書きされる静的な領域が参照されるため、そのメモリ領域に触れなければならないかどうか確信しています。Linuxでgetpwuid()が返すポインタを解放する必要がありますか?
ありがとうございました。
getpwuid(uid)を呼び出した後、ポインタへの参照があります。私はもうそれを使用しないときにそれを解放すべきですか?マニュアルページを読むと、同じ関数へのその後の呼び出しで上書きされる静的な領域が参照されるため、そのメモリ領域に触れなければならないかどうか確信しています。Linuxでgetpwuid()が返すポインタを解放する必要がありますか?
ありがとうございました。
いいえ結果を解放する必要はありません。 malloc(3)、calloc(3)、またはrealloc(3)を使用して、ヒープに割り当てられたポインタに対してのみfree(3)を呼び出すことができます。
静的データは、プログラムのデータセグメントまたはbssセグメントの一部であり、プロセスが終了するまで(またはexec(2)によって上書きされるまで)保持されます。
実際には既存の構造体へのポインタを返します。ではなく、を解放してください。
スレッドセーフ(リエントラント)関数には*_r
関数(getpwuid_r()
)を使用すると、返された情報を格納するバッファ領域を指定できます。成功または失敗の場合はerrnoを必ず確認してください。リエントラント関数を使用しない場合は、その関数が解放する必要はないデータを返すが、同じ関数への連続呼び出しによっても上書きされることは、安全に仮定できます。
メモリにも問題があるようです* _r関数 – codingfreak