问题描述
我一直在 Linux(使用 libcurl)中进行应用程序的所有开发,并决定在 Windows 64 位中构建它。一切顺利 - 它编译没有问题,等等......但是当我运行它时,我在调用 libcurl 的 curl_easy_perform()
时崩溃了。更具体地说:
Debug assertion failed! Expression: _CrtlsValidHeapPointer(block).
很困惑我回到 Linux 上运行 valgrind,并且没有损坏的堆块。回到 Windows,我尝试剥离所有应用程序代码并只运行标准的 CURL 教程代码:
CURL* req = curl_easy_init();
CURLcode res;
if (req)
{
curl_easy_setopt(req,CURLOPT_URL,"www.google.com");
curl_easy_setopt(req,CURLOPT_FOLLOWLOCATION,1L);
printf("Passed this point\n");
res = curl_easy_perform(req);
if (res != CURLE_OK)
{
fprintf(stderr,"curl_easy_operation() failed : %s\n",curl_easy_strerror(res));
}
}
curl_easy_cleanup(req);
你瞧,它仍然以同样的错误崩溃!
我对错误的唯一想法是构建配置中可能有问题?虽然我现在完全不知道它可能是什么......
我得到了这个项目的一个较旧的工作提交,并在该代码库中运行了与上面完全相同的 libcurl 代码,并且没有崩溃......
比较 MSVC 用于编译以前版本和当前版本的“命令行”命令后,它们对我来说似乎完全相同(相同的切换、.libs 和所有)。
有没有人知道在这种情况下可能导致崩溃的原因是什么?
编辑: 堆栈跟踪:
ntdll.dll!00007ffa809c9df2() Unknown
ntdll.dll!00007ffa8098e03a() Unknown
ntdll.dll!00007ffa80934365() Unknown
KernelBase.dll!00007ffa7e3dc99b() Unknown
ucrtbased.dll!00007ffa394c37d1() Unknown
ucrtbased.dll!00007ffa394c1b85() Unknown
ucrtbased.dll!00007ffa394c51c5() Unknown
ucrtbased.dll!00007ffa394c58c8() Unknown
vkPhysics_server.exe!Curl_setstropt() C
vkPhysics_server.exe!Curl_vsetopt() C
vkPhysics_server.exe!curl_easy_setopt() C
更新: 我尝试从先前的提交中调整较旧的 CMake 文件,并且崩溃停止了。我将尝试研究可能导致 CRT 崩溃的两者之间的区别(对于那些感兴趣的人,这里是 the diff)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)