导致此异常的原因是什么?将 VC++ 2010 与 libcurl 结合使用

What's causing this exception? Using VC++ 2010 with libcurl

本文关键字:2010 VC++ libcurl 结合 异常 是什么      更新时间:2023-10-16

我正在使用libcurl在vc++ 2010和得到这个错误:

类型为"System"的未处理异常。AccessViolationException"发生在4th .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"发生在4th .exe

'Fourth.exe':已加载'C:WindowsSysWOW64version.dll',导出加载。

类型为"System"的未处理异常。AccessViolationException"发生在4th .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线程冲突有关吗?

我把/MDd切换到/MD,它解决了这个问题,但不是没有添加一些其他!