我一直在尝试调试程序中的内存泄漏,并将其范围缩小到 WinHttp 通信。我已经能够在以下测试代码中重现该问题:
#include <windows.h>
#include "winhttp.h"
void main() {
while (1) {
HINTERNET send_session = WinHttpOpen(L"asdf", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
WinHttpCloseHandle(send_session);
}
}
运行几秒钟后,程序已经使用了超过 20MB 的内存。为什么要这样做?API声明您需要在不再需要句柄后调用 WinHttpCloseHandle - 我正在这样做。
我在 Arch Linux 上使用 mingw32 进行编译,并在 Windows 7 上运行代码。