исключение повреждения кучи при использовании cpprestsdk - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь использовать 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);
...
...