Я немного запутался, по крайней мере.
Вызов getaddrinfo () «обновляет» указатель на структуру addrinfo, все хорошо, когда я собираюсь использовать addrinfo в той же области (этой функции), но что произойдет, если я скопирую структуру в другую (назначив ее).
Пожалуйста, помогите мне понять основные принципы (не ищите совета для альтернативных подходов).
Поправь меня, если я ошибаюсь:
a) getaddrinfo () требует указатель на struct-pointer для addrinfo.
b) getaddrinfo создает структуру addrinfo в текущей области действия функции и обновляет указатель, необходимый в a)
Теперь мой реальный вопрос: я хотел бы хранить это аддринфо в другом месте. Использование присваивания другому указателю не делает глубокого копирования, и после функции все указатели становятся недействительными?
Лучше приведите чрезвычайно упрощенный пример:
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;
}
Непосредственное использование & update для getaddrinfo, похоже, не работает, потому что проблема остается: исходная структура уничтожается после окончания области действия функции.
Любой, кто сможет дать мне более глубокое понимание здесь (пожалуйста, объясните, что создается и где уничтожается, где складывается, куча вся информация приветствуется)