少なくとも私は少し混乱しています。getaddrinfo() 呼び出しは addrinfo 構造体へのポインタを「更新」します。同じスコープ (その関数) で addrinfo を使用する場合はすべて問題ありませんが、構造体を別のものにコピーするとどうなりますか (それを割り当てることによって)。
進行中の基本を理解するのを手伝ってください(代替アプローチのアドバイスは求めていません)。
間違っていたら訂正してください: a) getaddrinfo() には addrinfo への構造体ポインタへのポインタが必要です。b) getaddrinfo は、現在の関数スコープで addrinfo 構造体を作成し、a) で必要なポインターを更新します。
ここで私の本当の質問: その addrinfo を別の場所に保存したいと思います。他のポインターへの代入を使用してもディープ コピーは実行されず、関数の後ですべてのポインターが無効になりますか?
非常に単純化された例を挙げてください。
void GetAddrInfo(struct addrinfo *update)
{
struct addrinfo *res;
getaddrinfo(xx,xx,xx,&res);
//is this save? After this 'scope' ends all pointed fields are invalid?
//this doesn't copy the linked list ai_next.
*update=*res;
}
問題が残っているため、getaddrinfo で &update を直接使用しても機能しないようです。元の構造体は関数スコープの終了後に破棄されます。
ここでより多くの洞察を得ることができる人は誰でも(何がどこで作成され、どこで破棄されるか、スタック、すべての情報をヒープすることを歓迎します)