3

hostentこれは単なる一般的な質問ですが、たとえばWindowsで、使用する構造体へのポインタを作成する場合gethostbyname()、そのポインタのメモリの割り当てを解除する必要がありますか、それとも処理されますか。私は特にmallocそれを要求しなかったので、それは私の仕事ではないと思い込んでいます。誰かが私のためにこれを明確にすることができますか?

ありがとうございました

4

2 に答える 2

5

msdnによると

gethostbyaddrおよびgethostbyname関数によって返されるhostent構造体のメモリは、スレッドローカルストレージからWinsockDLLによって内部的に割り当てられます。スレッドでgethostbyaddr関数またはgethostbyname関数が何度呼び出されても、単一のhostent構造のみが割り当てられて使用されます。同じスレッドでgethostbyaddr関数またはgethostbyname関数を追加で呼び出す場合は、返されたhostent構造をアプリケーションバッファーにコピーする必要があります。それ以外の場合、戻り値は、同じスレッドでの後続のgethostbyaddrまたはgethostbyname呼び出しによって上書きされます。返されたhostent構造に割り当てられた内部メモリは、スレッドが終了するとWinsockDLLによって解放されます。

したがって、解放する必要があるのは、割り当てたメモリにその内容をコピーする場合のみです。

于 2013-02-20T19:41:44.670 に答える
0

の場合gethostbyname、ストレージの解放について心配する必要はありません。

一般に、ポインターを返す関数は、ポインターに関する呼び出し元の責任を文書化する必要があります。それを解放するか、別の関数に渡すか、この場合は何もする必要がないかもしれません。

ではstrdup、反例として、 を呼び出す必要がありますfree

于 2013-02-20T19:45:15.283 に答える