GetAcceptExSockaddrs 填充的指针的生命周期

Lifetime of pointers filled in by GetAcceptExSockaddrs

GetAcceptExSockaddrs 上的 MSDN 页面没有指定任何有关释放返回的地址指针 LocalSockaddrRemoteSockaddr 的内容。尝试释放它们会导致调试堆报告错误。所以我假设这些是一些静态指针。但在那种情况下,有更多知识的人可以提供一些关于他们一生的信息吗?这是通常的有效期至下次调用吗?

更准确地说-函数填充指向指针的指针,这就是为什么这不是简单地将指针传递给堆栈变量的原因。考虑这个片段:

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);

函数本身设置指针而不是仅仅填充它们的内容。

文档没有告诉你如何释放内存,因为你不需要释放内存。文档说:

The GetAcceptExSockaddrs function parses the data obtained from a call to the AcceptEx function and passes the local and remote addresses to a sockaddr structure.

在我看来,这句话的措辞很糟糕,但我希望这意味着返回的地址指向所提供缓冲区内的某处。换句话说,没有分配新内存,只要提供的缓冲区有效,GetAcceptExSockaddrs 返回的地址就有效。