【问题标题】:What's causing this exception? Using VC++ 2010 with libcurl是什么导致了这个异常?将 VC++ 2010 与 libcurl 一起使用
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 因为您的代码中有问题,但您不会向我们展示。 UB 是卑鄙的,但改变编译器开关不是解决方案。
  • 好吧,我的代码是用于零售加密应用程序的,我无法分享其中的大部分内容...只是需要针对特定​​错误的帮助,谢谢!这就是问题所在,因为 cURL 库似乎需要使用 /MD 开关而不是 /MDd 进行编译,只是让其他人知道谁在使用 cURL 来使用 /MD
猜你喜欢
  • 2014-11-07
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多