c++ - wininet.dll 中看似随机崩溃的原因?

标签 c++ crash httprequest wininet

我在 wininet.dll 深处遇到崩溃。 尝试读取 HTTP_REQUEST_HANDLE_OBJECT::ReleaseConnection

中的零内存位置时崩溃了

这是实际 DLL 中的错误,而不是由于使用不当造成的吗?

wininet!HTTP_REQUEST_HANDLE_OBJECT::ReleaseConnection+0x60
wininet!HTTP_REQUEST_HANDLE_OBJECT::CloseConnection+0x84
wininet!HTTP_REQUEST_HANDLE_OBJECT::ReadData_Fsm+0x5e8
wininet!CFsm_ReadData::RunSM+0x2e
wininet!CFsm::Run+0x39
wininet!DoFsm+0x25
wininet!HTTP_REQUEST_HANDLE_OBJECT::ReadData+0x38
wininet!HTTP_REQUEST_HANDLE_OBJECT::HttpReadData_Fsm+0x43
wininet!CFsm_HttpReadData::RunSM+0x2e
wininet!CFsm::Run+0x39
wininet!DoFsm+0x25
wininet!HttpReadData+0x67
wininet!ReadFile_Fsm+0x2d
wininet!CFsm_ReadFile::RunSM+0x2b
wininet!CFsm::Run+0x39
wininet!DoFsm+0x25
wininet!InternetReadFile+0x3ca

上下文是我正在尝试下载文件。我正在打电话

InternetReadFile(hFile, lpBuffer, dwNumberOfBytesToRead, lpdwNumberOfBytesRead);

hFile HINTERNET 句柄看起来不错(值是 0x00cc0024,这似乎是合法的)dwNumberOfBytesToRead 是 20000。

我的缓冲区大小是 131000,这也很好。

问题是我的代码在 99.9999% 的时间内都可以工作!

最佳答案

检查lpdwNumberOfBytesRead的使用。应该是:

DWORD *lpdwNumberOfBytesRead = &someDWORDsomewhere;
InternetReadFile (..., lpdwNumberOfBytesRead);

DWORD NumBytes
InternetReadFile (..., &NumBytes);

我有一种感觉,您正在执行第一种方法,而没有在有效的地方设置指针变量。

关于c++ - wininet.dll 中看似随机崩溃的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3471321/

相关文章:

c# - 如何强制 .NET (C#) 使用方法的非泛型重载?

c++ - C++ atexit() 函数发生奇怪的崩溃

c# - C++ 与 C# - 数组

Swift:切换 View 后使用 UILongPressGestureRecognizer 时应用程序崩溃

仅在设备上的 Android 应用程序崩溃

javascript - JavaScript 或 ServiceWorkers 可以检测网络事件/Ajax 事件吗?

c++ - 使用 POCO 上传文件 - SSL Connection Unexpectedly Closed Exception

javascript - 通过 Parse Cloud 代码进行 HTTP 请求

c++ - 从 C++ 执行 bash 脚本并读取其输出 ubuntu sdk

c++ - cpp 文件中的模板特化实现导致模板 ID 不匹配错误