Это не является частью вашего вопроса, но memset неверен.Вероятно, он должен иметь вид:
memset(hints, 0, sizeof(struct addrinfo));
В ответ на комментарий: в этом случае переменная является указателем, поэтому sizeof(hints)
будет 4 байта (или 8 байтов в 64-битной системе).).Это также может быть записано sizeof(*hints)
(по сути говоря, размер структуры, на которую указывает переменная).Таким образом, различие в этом случае заключается в том, ссылаетесь ли вы на саму структуру или на указатель на структуру.
В действительности, вызов memset в OP является "последовательным".Он устанавливает значение переменной hints
в 0 и передает адрес переменной &hints
в функцию memset, а размер этой переменной - как число байтов в memset.Таким образом, вызов был «непротиворечивым» и «правильным», но в результате он очистил бы переменную, и следующий оператор (hints-> ai_family) разыменовал бы нулевой указатель.Так что, хотя «правильно», это, вероятно, не было намерением.