我試圖寫一個類從網站得到一些C++數據使用捲曲。下面是該類的示例(有一個Curl * curl_數據成員,rawData_是一個字符串)。這段摘錄來自實現文件,所有函數都在頭文件中聲明。的libcurl /捲曲C++內存設計缺陷
MyClass::MyClass()
{
curl_global_init(CURL_GLOBAL_ALL);
curl_ = curl_easy_init();
curl_easy_setopt(curl_, CURLOPT_URL,
"http://www.google.com");
curl_easy_setopt(curl_, CURLOPT_WRITEFUNCTION, &MyClass::writeCallback);
}
MyClass::~MyClass()
{
curl_easy_cleanup(curl_);
curl_global_cleanup();
}
size_t MyClass::writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{
//buf is a pointer to the data that curl has for us
//size*nmemb is the size of the buffer
for (size_t c = 0; c<size*nmemb; ++c)
{
cerr << c << endl;
rawData_.push_back(buf[c]);
}
return size*nmemb; //tell curl how many bytes we handled
}
void MyClass::makeCall()
{
curl_easy_perform(curl_);
}
當我創建一個MyClass的實例並調用makeCall時,writeCallBack函數中存在一個segfault。也就是說,buf看起來大小爲0(當c = 0時,它在buf [c]的調用中斷開)。任何幫助表示讚賞
你是否測試'BUF == this'? –
這是我應該擔心的事嗎?據我所知,'buf'是網絡傳入的東西;它應該基本上是來自網站的數據。 – GuestUser11111
我的意思是,對於C++類方法,可以認爲'this'是靜態C風格函數的隱含的第一個參數。如果curl正在調用你提供的回調,就好像它是一個C樣式函數(它是),至少調用約定不是C++在調用類方法時所期望的,並且未定義的事情發生。 –