cpprestsdk ошибки конструктора http_client

Я использую приведенный ниже код в двух разных независимых проектах.

auto fileStream = std::make_shared<ostream>();

    // Open stream to output file.
    pplx::task<void> requestTask = fstream::open_ostream(U("results.html"))

        .then([=](ostream outFile)
        {
            *fileStream = outFile;


            // Create http_client to send the request.
            http_client client(U("http://www.bing.com/"));

            // Build request URI and start the request.
            uri_builder builder(U("/search"));

            builder.append_query(U("q"), U("cpprestsdk github"));

            return client.request(methods::GET, builder.to_string());
        })

        // Handle response headers arriving.
        .then([=](http_response response)
        {
            printf("Received response status code:%u\n", response.status_code());

            // Write response body into the file.
            return response.body().read_to_end(fileStream->streambuf());
        })

        // Close the file stream.
        .then([=](size_t)
        {
            return fileStream->close();
            })
        ;

        // Wait for all the outstanding I/O to complete and handle any exceptions
        try
        {
            requestTask.wait();
        }
        catch (const std::exception& e)
        {
            printf("Error exception:%s\n", e.what());
        }

Проект 1: больше, с другими вещами Проект 2: один просто содержит код ниже

когда я компилирую и запускаю проект 2, ошибок не возникает, и код работает отлично, но если я компилирую проект 1, он компилируется без ошибок, но во время выполнения возникает ошибка в uri_builder builder(U("/search"));, которая говорит:

Исключение по адресу 0x00007FF643034EE7 в Sgimri_TC2_V2.exe: 0xC0000005: Доступ к насилию для чтения в позиции 0x0000000000000000. (Я перевел это с немецкого на английский)

эта ошибка возникает в xstring здесь:

public:
    basic_string(const basic_string& _Right)
        : _Mypair(_One_then_variadic_args_t{}, _Alty_traits::select_on_container_copy_construction(_Right._Getal())) {
        auto&& _Alproxy = _GET_PROXY_ALLOCATOR(_Alty, _Getal());
        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);
        _Construct_lv_contents(_Right);
        _Proxy._Release();
    }

конкретно ошибка возникает в этой строке _Construct_lv_contents(_Right);

Это связано с конструктором uri_builder, где некоторые компоненты имеют значение NULL. Нечто подобное произошло в здесь, но я не знаю, как реши.

У кого-нибудь есть решение, подсказка или совет, который мне поможет? Было бы замечательно!

Спасибо.


person Tobi    schedule 23.11.2020    source источник


Ответы (1)


Я исправил эту проблему самостоятельно. Вот краткий способ, как я решил проблему.

Я использовал MS Visual Studio 2019 и скомпилировал свой проект как версию x64, Release. После изменения его на x64, Debug и изменения настроек проекта в Свойствах проекта -> Создание кода C/C++ -> Библиотека времени выполнения на Многопоточность- Debug-DLL(/MDd) компилируется и запускается без ошибок.

person Tobi    schedule 24.11.2020