ntdll.dll 中未处理的 Winsock getaddrinfo exception/crash
Winsock getaddrinfo unhandled exception/crash in ntdll.dll
我正在尝试使用 GetAddrInfoExW()
解析 C 中的主机名
struct addrinfoexW hints, *res;
int errcode;
void *ptr = 0;
ZeroMemory(&hints, sizeof(struct addrinfoexW));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags |= AI_CANONNAME;
errcode = GetAddrInfoExW(
L"google.de", // pName
L"80", // pServiceName
NS_DNS, // dwNameSpace
NULL, // lpNspId
&hints, // hints
&res, // ppResult
NULL, // timeout
NULL, // lpOverlapped
NULL, // lpCompletionRoutine
NULL // lpHandle
);
if (errcode != 0)
{
//perror("getaddrinfo");
return -1;
}
...但它总是在调用 GetAddrInfoEx 时崩溃:
ntdll.dll!RtlAllocateHeap() Unbekannt
mswsock.dll!SockLoadTransportMapping() Unbekannt
mswsock.dll!SockGetTdiName() Unbekannt
mswsock.dll!SockSocket() Unbekannt
mswsock.dll!WSPSocket() Unbekannt
ws2_32.dll!WSASocketW() Unbekannt
ws2_32.dll!GetProtocolStateForFamily() Unbekannt
ws2_32.dll!GetAddrInfoExW() Unbekannt
Main.exe!lookup_host(const wchar_t * host, addrinfo * out) Zeile 112
看来我传递的所有值都是正确的。我还尝试过使用 GetAddrInfoEx 和 GetAddrInfo,它们都使用 Unicode 和 Ansi。堆栈跟踪也会在每个 运行.
上发生变化
我也试过使用已弃用的 gethostbyname,它给出了类似的结果...
已解决: 我认为堆已被较早的分配损坏。通过分配更多 space 修复。谢谢大家
当您在堆栈顶部看到带有 RtlAllocateHeap
的异常时,您的代码中的错误发生得更早:RltAllocateHeap
表明应用程序中的某些先前操作损坏了堆结构。
您可以通过在调用 GetAddr...
等之前调用 HeapValidate
来验证这一点
我正在尝试使用 GetAddrInfoExW()
解析 C 中的主机名struct addrinfoexW hints, *res;
int errcode;
void *ptr = 0;
ZeroMemory(&hints, sizeof(struct addrinfoexW));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags |= AI_CANONNAME;
errcode = GetAddrInfoExW(
L"google.de", // pName
L"80", // pServiceName
NS_DNS, // dwNameSpace
NULL, // lpNspId
&hints, // hints
&res, // ppResult
NULL, // timeout
NULL, // lpOverlapped
NULL, // lpCompletionRoutine
NULL // lpHandle
);
if (errcode != 0)
{
//perror("getaddrinfo");
return -1;
}
...但它总是在调用 GetAddrInfoEx 时崩溃:
ntdll.dll!RtlAllocateHeap() Unbekannt
mswsock.dll!SockLoadTransportMapping() Unbekannt
mswsock.dll!SockGetTdiName() Unbekannt
mswsock.dll!SockSocket() Unbekannt
mswsock.dll!WSPSocket() Unbekannt
ws2_32.dll!WSASocketW() Unbekannt
ws2_32.dll!GetProtocolStateForFamily() Unbekannt
ws2_32.dll!GetAddrInfoExW() Unbekannt
Main.exe!lookup_host(const wchar_t * host, addrinfo * out) Zeile 112
看来我传递的所有值都是正确的。我还尝试过使用 GetAddrInfoEx 和 GetAddrInfo,它们都使用 Unicode 和 Ansi。堆栈跟踪也会在每个 运行.
上发生变化我也试过使用已弃用的 gethostbyname,它给出了类似的结果...
已解决: 我认为堆已被较早的分配损坏。通过分配更多 space 修复。谢谢大家
当您在堆栈顶部看到带有 RtlAllocateHeap
的异常时,您的代码中的错误发生得更早:RltAllocateHeap
表明应用程序中的某些先前操作损坏了堆结构。
您可以通过在调用 GetAddr...
等之前调用 HeapValidate
来验证这一点