На странице MSDN на GetAcceptExSockaddrs ничего не говорится о высвобождении возвращенных адресных указателей LocalSockaddr
и RemoteSockaddr
. Попытка освободить их приводит к ошибке, сообщаемой кучей отладки. Поэтому я предполагаю, что это некоторые статические указатели. Но в таком случае кто-нибудь с большим количеством знаний может предоставить некоторую информацию об их жизни? Это обычный действительный до следующего звонка вещь?Срок службы указателей, заполненных GetAcceptExSockaddrs
Чтобы быть более точным - функция заполняет указатели указателями, поэтому это не случай простого перехода в указатели на стек переменных. Рассмотрим этот фрагмент:
INT LocalAddressLength = 0, RemoteAddressLength = 0;
LPSOCKADDR LocalAddress = nullptr, RemoteAddress = nullptr;
m_pGetAcceptExSockaddrs(buf, m_nReceiveBufferSize, sizeof(SOCKADDR_IN) + 16, sizeof(SOCKADDR_IN) + 16, &LocalAddress, &LocalAddressLength, &RemoteAddress, &RemoteAddressLength);
Функция сама устанавливает указатели вместо того, чтобы просто заполнять их содержимое.
Да? Это _your_ указатели, которые вы должны предоставить для функции записи данных. Вы несете ответственность за их управление. – SingerOfTheFall
@SingerOfTheFall параметры являются указателями на указатели - они заполняются функцией, и если я попробую простой «удалить», я получаю утверждение, поэтому я не думаю, что это тривиально. Я имею в виду - Microsoft обычно указывает, следует ли использовать стандартные механизмы освобождения, или 'CoTaskMemFree' или что-то еще. –
Связанная вами страница говорит, например, «RemoteSockaddr [out] Указатель на структуру sockaddr», что заставляет вас думать о указателях указателей? – SingerOfTheFall