【发布时间】:2015-09-15 23:07:49
【问题描述】:
我在 VC++ 2010 中使用 libcurl 并收到此错误:
“System.AccessViolationException”类型的未处理异常 发生在Fourth.exe
附加信息:试图读取或写入受保护的内存。 这通常表明其他内存已损坏。
std::string DownloadFile(std::string Fname, std::string Furl)
{
CURL *curl;
CURLcode res;
const char *url = Furl.c_str();
curl = curl_easy_init();
if (curl) {
FILE * pFile;
pFile = fopen(Fname.c_str(),"wb");
if (pFile!=NULL) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, pFile);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
char errbuf[CURL_ERROR_SIZE];
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
res = curl_easy_perform(curl);
std::string xres = curl_easy_strerror(res); //// HERE ////
curl_easy_cleanup(curl);
fclose(pFile);
return xres;
}
}
}
任何想法我哪里出错了?
线程“Win32 线程”(0x86c) 已退出,代码为 0 (0x0)。
Fourth.exe 中 0x77a6d968 (ntdll.dll) 处的第一次机会异常: 0xC0000005:访问冲突写入位置0x00000014。
“System.AccessViolationException”类型的第一次机会异常 发生在Fourth.exe
“Fourth.exe”:已加载“C:\Windows\SysWOW64\version.dll”,导出 已加载。
“System.AccessViolationException”类型的未处理异常 发生在Fourth.exe
附加信息:试图读取或写入受保护的内存。 这通常表明其他内存已损坏。
线程“Win32 线程”(0x148c) 已退出,代码为 0 (0x0)。
线程“Win32 线程”(0x170c) 已退出,代码为 0 (0x0)。
线程“主线程”(0x83c) 已退出,代码为 0 (0x0)。
线程“Win32 线程”(0x1174) 已退出,代码为 0 (0x0)。
线程“Win32 线程”(0xc74) 已退出,代码为 0 (0x0)。
程序“[1232] Fourth.exe: Native”已退出,代码为 0 (0x0)。
程序“[1232] Fourth.exe: Managed (v4.0.30319)”已退出 代码 0 (0x0)。
这可能与 \SysWOW64\ DLL 和 Win32 线程冲突有关吗?
【问题讨论】:
-
请提供发生错误的可编译示例。 stackoverflow.com/help/mcve
-
它出现在这一行 "std::string xres = curl_easy_strerror(res);"
-
重复:
Please a compilable example where the error occurs. stackoverflow.com/help/mcve。除此之外,有些代码路径没有return,那就是UB。 -
崩溃前
res的设置是什么? -
res 为空,仅定义
标签: c++ visual-studio-2010 exception libcurl