我在使用 Windows 版本的 MPIR 时遇到内存损坏错误,该错误显示在以下最小测试用例中。
Microsoft (R) C/C++ 优化编译器版本 19.25.28610.4 for x64
使用此脚本从 github checkout 编译 MPIR(刚刚验证了问题仍然在最新版本中重现):
pushd \mpir\msvc\vs19
call msbuild.bat gc DLL x64 Debug
call msbuild.bat gc LIB x64 Release
popd
copy \mpir\dll\x64\Debug\mpir.dll
使用这个源文件作为测试用例:
#include <stdio.h>
#include <gmp.h>
int main(int argc, const char **argv) {
mpz_t x;
mpz_init_set_str(x,"123",10);
mpz_out_str(stdout,10,x);
putchar('\n');
return 0;
}
像这样编译:
cl /I\mpir /MTd a.cc \mpir\dll\x64\Debug\mpir.lib
并运行生成的程序,产生正确的输出,但在退出时显示堆损坏,在弹出窗口中显示错误消息,不幸的是不允许复制粘贴,但它在
C:\Program Files (x86)\Windows Kits\10\Source\10.0.18362.0\ucrt\heap\debug_heap.cpp
第 996 行,即
_ASSERTE(__acrt_first_block == header);
这是已知解决方案的问题吗?或者是否有一种已知的方法可以准确地找出问题所在?