【发布时间】:2011-07-08 12:50:20
【问题描述】:
我尝试使用带有 CURLOPT_WRITEFUNCTION 的 C++11 lambda 表达式,但程序在运行时因访问冲突而崩溃。由于缺乏 C++11 知识,我不确定如何进一步研究此问题,但也许其他人知道如何完成这项工作。
功能:
#ifndef CURL_GET_H
#define CURL_GET_H
#include <curl/curl.h>
#include <curl/easy.h>
#include <vector>
#include <string>
std::vector<std::string> curl_get(const char* url)
{
CURL *curl;
CURLcode res;
std::vector<std::string> content;
auto curl_callback = [](void *ptr, size_t size, size_t nmemb, void *stream) -> size_t {
// does nothing at the moment due to testing...
return size * nmemb;
};
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/aaa.txt");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_callback);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return content;
}
#endif // CURL_GET_H
错误:
Unbehandelte Ausnahme bei 0x000000cc in lpip_dl.exe: 0xC0000005: Zugriffsverletzung bei Position 0x00000000000000cc。
(位置 0x00000000000000cc 的访问冲突)
当 curl 想要使用回调时发生:
wrote = data->set.fwrite_func(ptr, 1, len, data->set.out);
【问题讨论】:
-
你用的是什么编译器? VC++?如果是这样,VC++ 不支持隐式 lambda 到函数指针的转换(还没有?)。
-
是的,我使用的是 VS2010 SP1。我已经注意到涉及 lambda 函数和函数指针的其他问题,但看不到与我的问题的联系。我想我只需要等待下一个 VS 版本:/ 解决方法非常......令人困惑。