在Windows版本的MPIR中,我遇到了一个内存损坏错误,它显示在下面的最小测试用例中。
微软(R) C/C++优化编译器版本19.25.28610.4用于x64
使用以下脚本从github签出编译了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:\程序文件(x86)\Windows x86
第996行,即
_ASSERTE(__acrt_first_block == header);这是一个已知的解决方案的问题吗?还是有一种已知的方法可以准确地追踪到底出了什么问题?
发布于 2021-03-19 17:53:47
我从来没有找到问题的确切原因,但我认为这与构建过程有关,构建过程通过许多抽象层使用MSBuild,因此几乎不可能确切地确定到底发生了什么。
我使用一个简单、透明的构建过程组装了一个MPIR发行版,并且与此版本链接,问题不会发生。
https://stackoverflow.com/questions/66692966
复制相似问题