У меня есть простая функция, которая позволяет мне получать содержимое файла на сервере. Он работает так, как я хочу , но«Визуальный детектор утечки» указывает на утечку памяти на линии closeSocket(...)
.Утечка памяти - сокет или строчка?
код ниже:
string executeUrl(const char *url)
{
SOCKET sConnection;
char szHeader[500];
sprintf(szHeader, "GET %s HTTP/1.0\r\n"
"Host: %s\r\n"
"User-Agent: Agent\r\n"
"\r\n", url, HTTPSERVER);
sConnection = HTTPConnectToServer(HTTPSERVER);
if (sConnection == 0)
{
return "";
}
send(sConnection, szHeader, strlen(szHeader), 0);
char reply[1024];
ZeroMemory(reply, 1024);
if (recv(sConnection, reply, 1024, 0) == SOCKET_ERROR)
{
return "";
}
string returnString(reply);
closesocket(sConnection);
WSACleanup();
return returnString;
}
Данные просочилась является строка returnString
. Так что это либо связанная строка, либо что-то с closesocket()
.
Я сделал некоторое чтение, и я не могу понять это. По-видимому, струны должны заботиться о себе и не вызывать утечки памяти, не так ли?
EDIT:
Я попытался следующий код: http://www.zedwood.com/article/cpp-winsock-basic-http-connection
Даже этот код создает утечку памяти для меня. Я также тестировал другое приложение (Deleaker), и он также сказал мне, что есть те же утечки памяти.
EDIT2:
Только что узнал его не единственный раз, когда строка утечки памяти. Этот фрагмент кода также является проблемой:
urlString = (string)"http://someurl" + std::wstring_convert<std::codecvt_utf8<wchar_t>>().to_bytes(pcName) + (string)"somefile.php";
Проникшие данные - это то, что удерживает «urlString». Я полностью смущен.
Действительно, строка не должна течь. Таким образом, мои деньги находятся на закрытии или в детекторе утечки. – Borgleader
И все же блок «данных» в VLD содержит ТОЧНО, что находится в «returnString». Я убедился, изменив его из «ответа». – GrubyStack
попытался «ИЗМЕНИТЬ», с Visual Studio Express 2013 и Visual Leak Detector 2.3, «Не обнаружено утечек памяти». , Попробовал эту [link] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms740121 (v = vs.85) .aspx) с небольшой модификацией для создания строки на основе полученного буфера - «Нет обнаружены утечки памяти ". – StahlRat