造成这种异常的原因是什么?将VC ++ 2010与libcurl一起使用

时间:2015-09-15 23:07:50

标签: c++ visual-studio-2010 exception libcurl

我在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 Thread'(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 Thread'(0x148c)已退出,代码为0(0x0)。

     

线程'Win32 Thread'(0x170c)已退出,代码为0(0x0)。

     

线程'主线程'(0x83c)已退出,代码为0(0x0)。

     

线程'Win32 Thread'(0x1174)已退出,代码为0(0x0)。

     

线程'Win32 Thread'(0xc74)已退出,代码为0(0x0)。

     

程序'[1232] Fourth.exe:Native'已退出,代码为0(0x0)。

     

程序'[1232] Fourth.exe:Managed(v4.0.30319)'已退出   代码0(0x0)。

它可能与\ SysWOW64 \ DLL和Win32线程有冲突吗?

1 个答案:

答案 0 :(得分:-1)

我将/ MDd开关更改为/ MD并且它解决了这个问题,但不是没有添加其他问题!