Я пытаюсь отправить некоторые данные в PHP скрипт из проекта ++ моих с так:HTTP-запросы вызывают кучевое повреждение?
void sendThatBitch()
{
DWORD dwSize = 0;
DWORD dwDownloaded = 0;
LPSTR pszOutBuffer;
vector <string> vFileContent;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen(L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
{
cout << "WinHttpOpen\n";
hConnect = WinHttpConnect(hSession, L"example.com", INTERNET_DEFAULT_HTTP_PORT, 0);
}
// Create an HTTP request handle.
if (hConnect)
{
cout << "WinHttpConnect\n";
string req = "/script.php?data1=";
req += DATA1;
req += "&data2=";
req += DATA2;
req += '\0';
WCHAR* str = new WCHAR(req.size() - 1);
MultiByteToWideChar(0, 0, req.c_str(), req.size(), str, req.size());
hRequest = WinHttpOpenRequest(hConnect, L"GET", str, NULL, WINHTTP_NO_REFERER, NULL, NULL);
}
// Send a request.
if (hRequest)
{
cout << "WinHttpOpenRequest\n";
bResults = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
}
// End the request.
if (bResults)
{
cout << "WinHttpSendRequest\n";
bResults = WinHttpReceiveResponse(hRequest, NULL);
}
// Close any open handles.
if (hRequest)
{
WinHttpCloseHandle(hRequest);
}
if (hConnect)
{
WinHttpCloseHandle(hConnect);
}
if (hSession)
{
WinHttpCloseHandle(hSession);
}
}
Теперь моя проблема здесь что-то, что происходит в большинстве случаев, но не всегда. Иногда данные действительно присылают, но когда я получаю ошибку он выглядит следующим образом: обнаружен
Критическая ошибка c0000374 application.exe вызвала точку останова.
Исключение при первой возможности в 0x77EFE653 (ntdll.dll) в application.exe: 0xC0000374: Куча повреждена (параметры: 0x77F34268).
Необработанное исключение в 0x77EFE653 (ntdll.dll) в application.exe: 0xC0000374: Куча повреждена (параметры: 0x77F34268).
Это происходит на eather WinHttpOpenRequest
или WinHttpSendRequest
. Кто-нибудь имеет представление о том, почему это происходит большую часть времени?
примечание: домен, указанный в этом коде, является поддельным, а не тем, который используется в реальном коде.
Попробуйте следующее: WCHAR * str = new WCHAR (req.size()); – ChrisWard1000
, то я получаю: «Исключение первого шанса в 0x756EF80A (KernelBase.dll) в application.exe: 0xC0000005: место записи нарушения доступа 0x005B5000. Необработанное исключение в 0x756EF80A (KernelBase.dll) в application.exe: 0xC0000005: место записи нарушения доступа 0x005B5000.' – jt123
Я думаю, вам нужно использовать MultiByteToWideChar, как описано в ответах здесь: https://stackoverflow.com/questions/ 6693010/problem-using-multibytetowidechar – ChrisWard1000