hostent
これは単なる一般的な質問ですが、たとえばWindowsで、使用する構造体へのポインタを作成する場合gethostbyname()
、そのポインタのメモリの割り当てを解除する必要がありますか、それとも処理されますか。私は特にmalloc
それを要求しなかったので、それは私の仕事ではないと思い込んでいます。誰かが私のためにこれを明確にすることができますか?
ありがとうございました
msdnによると
gethostbyaddrおよびgethostbyname関数によって返されるhostent構造体のメモリは、スレッドローカルストレージからWinsockDLLによって内部的に割り当てられます。スレッドでgethostbyaddr関数またはgethostbyname関数が何度呼び出されても、単一のhostent構造のみが割り当てられて使用されます。同じスレッドでgethostbyaddr関数またはgethostbyname関数を追加で呼び出す場合は、返されたhostent構造をアプリケーションバッファーにコピーする必要があります。それ以外の場合、戻り値は、同じスレッドでの後続のgethostbyaddrまたはgethostbyname呼び出しによって上書きされます。返されたhostent構造に割り当てられた内部メモリは、スレッドが終了するとWinsockDLLによって解放されます。
したがって、解放する必要があるのは、割り当てたメモリにその内容をコピーする場合のみです。
の場合gethostbyname
、ストレージの解放について心配する必要はありません。
一般に、ポインターを返す関数は、ポインターに関する呼び出し元の責任を文書化する必要があります。それを解放するか、別の関数に渡すか、この場合は何もする必要がないかもしれません。
ではstrdup
、反例として、 を呼び出す必要がありますfree
。