写回调函数中的C++ LIbCURL SEG故障

写回调函数中的C++ LIbCURL SEG故障,c++,json,rest,curl,libcurl,C++,Json,Rest,Curl,Libcurl,我想尽快把事情做完。我看到另一个,并试图重用代码。我正在访问几个返回json的非多线程rest服务,当调用CURLOPT_WRITEFUNCTION时,它抛出一个seg错误。我仍然试图掌握所有C++概念,所以诊断相当困难。 这是我看到的 static std::string *DownloadedResponse; static size_t writer(char *data, size_t size, size_t nmemb, std::string *buffer_in) {

我想尽快把事情做完。我看到另一个,并试图重用代码。我正在访问几个返回json的非多线程rest服务,当调用CURLOPT_WRITEFUNCTION时,它抛出一个seg错误。我仍然试图掌握所有C++概念,所以诊断相当困难。 这是我看到的

static std::string *DownloadedResponse;

static size_t writer(char *data, size_t size, size_t nmemb, std::string *buffer_in)
{
    cout << "In writer callback" << endl;

    // Is there anything in the buffer?
    if (buffer_in != NULL)
    {
        cout << "Buffer not null" << endl;
        // Append the data to the buffer
        buffer_in->append(data, size * nmemb);
        cout <<" Buffer appended, seting response" << endl;

        DownloadedResponse = buffer_in;
        cout << "Set downloadedResponse" << endl;
        return size * nmemb;
    }

    return 0;
}

std::string downloadJSON(std::string URL)
{
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers=NULL; // init to NULL is important
    std::ostringstream oss;
    curl_slist_append(headers, "Accept: application/json");
    curl_slist_append( headers, "Content-Type: application/json");
    curl_slist_append( headers, "charsets: utf-8");
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPGET,1);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer); // I comment this to display response in stdout.

        cout << "calling easy_perform" << endl;
        res = curl_easy_perform(curl);
        cout << "call made.." << endl;
        if (CURLE_OK == res)
        {
            char *ct;
            res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
            if((CURLE_OK == res) && ct)
            {
                cout << "returning downloaded resposne" << endl;
                return *DownloadedResponse;
            }
        } 
        else 
        {
            cout << "CURLCode: " << res << endl;
        }
    }
    cout << "Returning null" << endl;
    return NULL;
}

我是如何在writer回调函数中不正确地使用字符串的?

您忘了用传递字符串指针/引用

$ ./test-rest
calling easy_perform
In writer callback
Buffer not nullSegmentation fault (core dumped)