c++ - 假定 Windows C++ 代码中的堆损坏,而在 Linux 中运行良好(_CrtlsValidHeapPointer(block)) - libcurl
问题描述
我已经在 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 崩溃的两者之间的区别(对于那些感兴趣的人,这里是diff)
解决方案
推荐阅读
- python - “with”语句是否支持类型提示?
- python - PySpark - 如何使用 jdbc 连接更新 Kudu 表?
- python - FFMPEG - 为什么我不能录制超过 10 秒的视频?
- bash - 为什么使用 += 在 bash 中存储命令的退出状态?
- java - 如何使用 Mockito 通过注解注入模拟集合
- active-directory - 将 Microsoft Bot v4 与 ServiceNow 集成
- ietf-netmod-yang - 不可读 - YANG
- pdftron - PDFTRON 中的“此文档没有页面”错误
- python - 使用子进程打开一个exe文件并与之交互
- java - 如何将括号括在百分比周围?