【发布时间】:2019-03-16 04:32:52
【问题描述】:
我遇到了这个异常
******.exe 中 0x00000000772CA267 (ntdll.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0xFFFFCA800000000。
当我查看调用堆栈时,我没有在堆栈中看到我的代码,而是在下面:
ntdll.dll!RtlFreeHeap() Unknown
kernel32.dll!HeapFree() Unknown
winhttp.dll!CAuthData::Clear(void) Unknown
winhttp.dll!HTTP_USER_REQUEST::_AdjustCredentialStates(unsigned short,int *) Unknown
winhttp.dll!HTTP_USER_REQUEST::_ResponseProcessingLoop(class PENDING_API_CALL *) Unknown
winhttp.dll!HTTP_USER_REQUEST::OnRecvResponse(unsigned long) Unknown
winhttp.dll!WEBIO_REQUEST::OnIoComplete(unsigned long,unsigned __int64,class HTTP_ASYNC_OVERLAPPED *) Unknown
winhttp.dll!HTTP_THREAD_POOL::_WorkItemCallback(void) Unknown
ntdll.dll!TppWorkpExecuteCallback() Unknown
ntdll.dll!TppWorkerThread() Unknown
kernel32.dll!BaseThreadInitThunk() Unknown
ntdll.dll!RtlUserThreadStart() Unknown
我们使用 SOAP 请求/请求。但是我们已经将几个 req/res 更新为 REST,而不是我们使用 json req/res。在此更改之后,我们得到了上述问题。有时一切正常 你可以说失败是 50% 次。
【问题讨论】:
-
你需要调试你的代码。您没有在此处发布的代码出现问题,可能是某个地方的缓冲区溢出,
ntdll.dll!RtlFreeHeap()建议这样做.. -
您的代码似乎损坏了堆
-
我只能从 VS 获得调用堆栈上方
-
有什么技术/工具可以找出缓冲区溢出发生在哪里?
-
TppWorkerThread- 这是来自系统线程池的工作线程。它执行 winhttp 库回调。 (WEBIO_REQUEST::OnIoComplete) - 这里没有你的代码和错误。堆已经在另一个地方损坏了
标签: c++ windows winapi visual-studio-debugging winhttp