Получение необработанного исключения NULL при использовании curl_easy_cleanup (curl) - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть приложение Unity, которое использует плагин c ++, который я написал для выполнения http-запросов.Этот плагин использует библиотеки curl.

Согласно документации по curl, они рекомендуют использовать curl_easy_cleanup (curl) в качестве последней команды, чтобы освободить дескриптор и очистить все ресурсы.

Вот мой код, который выполняет простой HTTP-запрос POST:

struct curl_slist *headers = NULL;
CURL *curl = NULL;
curl  = curl_easy_init();
int httpCode(0);

if(curl)
{
    headers = curl_slist_append(headers, "Accept: application/json");
    headers = curl_slist_append(headers, "Content-Type: application/json");
    headers = curl_slist_append(headers, "charsets: utf-8");

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
    //Set remote URL
    curl_easy_setopt(curl, CURLOPT_URL, endpoint.c_str());

    std::string params;
    for(std::unordered_map<std::string,std::string>::iterator it = parameters.begin(); it != parameters.end(); ++it)
    {
        params = it->first + ": " + it->second + " ";
        headers = curl_slist_append(headers, (const char *)params.c_str());
    }

    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonObject.c_str());
    CURLcode res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ResponseRecievedCallback);

    res = curl_easy_perform(curl);
    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode);

//Uncommenting this line makes my application crash

    //curl_easy_cleanup(curl);
}

Однако, когда я добавляю эту строку, мое приложение Unity падает со следующим исключением:

 Receiving unhandled NULL exception
Obtained 13 stack frames.
#0  0x000001207a4438 in Curl_expire_clear
#1  0x00000120790e25 in Curl_close

Я провел последние пару дней в Интернете в поисках решения, прочитал документацию по curl, но не смог найти никакой помощи.Буду признателен, если кто-нибудь сможет объяснить, почему это может произойти сбой?

Большое спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Исправлена ​​проблема, делающая httpCode длинным вместо int (согласно документации).Должно быть, я упустил это раньше!

...