Я пытаюсь использовать http_listener в моем более крупном проекте MFC, построенном в visual studio 2017 с набором инструментов платформы v141.Проект статически связывается с другими библиотеками на основе MFC, созданными с использованием набора инструментов платформы v141_xp.Он работает нормально, пока не выполнится код, который ссылается на cpprestsdk.Cpprestsdk был установлен с использованием vcpkg, который создал cpprestsdk с использованием набора инструментов платформы vc141.Я не знаю, являются ли проблемы различными версиями наборов инструментов платформы, но я не знаю, что еще может быть причиной проблемы.
В моем проекте нет известных ранее проблем с повреждением кучи, поэтому факт, что этовызывает повреждение кучи не имеет смысла для меня.
вот строка кода, вызывающая оскорбления:
utility::string_t port = U("34568");
utility::string_t address = U("http://127.0.0.1:");
address.append(port);
web::uri_builder uri(address);
auto addr = uri.to_uri().to_string();
std::unique_ptr<http_listener> listener = std::make_unique<http_listener>(uri);
---->listener->open().wait();
Если я переместить этот код в самом начале проекта, он будетне сбой в этой строке, однако, как только он получит HTTP-запрос, произойдет сбой аналогичным образом.
Информация об ошибке:
Обнаружена критическая ошибка c0000374 Возникло исключение в 0x7734A2B9 (ntdll.dll) в AuthenticationServer.exe: 0xC0000374: повреждена куча (параметры: 0x77384910).Необработанное исключение в 0x7734A2B9 (ntdll.dll) в AuthenticationServer.exe: 0xC0000374: куча была повреждена (параметры: 0x77384910).
Вот кадр стека вызовов, в который выдается исключение:
pplx::task<void> http_server_api::register_listener(
_In_ web::http::experimental::listener::details::http_listener_impl* listener)
{
-----> return pplx::create_task([listener]() {
pplx::extensibility::scoped_critical_section_t lock(s_lock);
...