c++ - win7 + vc7.1 + mfc = 计算器

标签 c++ visual-studio visual-c++ mfc

我已将我的 vc7.1 项目从 WInXP 移至 Win7。重建后,当我启动程序时,函数 _malloc_dbg 出现 stackoverflow 错误。

"Unhandled exception at 0x0051bf0f in XXX.exe: 0xC00000FD: Stack overflow."

----------------------
Call stack:
> msvcr71d.dll!_malloc_dbg(unsigned int nSize=140, int nBlockUse=2, const char * szFileName=0x10267784, int nLine=163)

  msvcr71d.dll!_calloc_dbg(unsigned int nNum=1, unsigned int nSize=140, int nBlockUse=2, const char * szFileName=0x10267784, int nLine=163)

  msvcr71d.dll!_mtinit()

  msvcr71d.dll!_CRTDLL_INIT(void * hDllHandle=0x10200000, unsigned long dwReason=1, void * lpreserved=0x0018fd24)

----------------------

我尝试在项目选项中设置不同的堆栈大小(从 10 到 100 兆字节),在所有情况下我都会遇到此错误。

我该如何解决这个问题?

最佳答案

诸如“从'int'转换为更大尺寸的'void '”和“从'size_t'转换为'int',可能丢失数据”之类的警告几乎肯定意味着您不小心将应用程序编译为64 位。他们想说的是 int 的大小(通常是 32 位)和 size_t 或 void 是不同的。在 32 位编译中,size_t 通常与 int 大小相同,而在 64 位中,它可能是 64 位。这同样适用于 void* 等指针类型。

我会首先仔细检查您的应用程序是否确实以 32 位模式构建。是否可以运行类似 unix"file"的东西来检查可执行文件格式?

一旦检查完毕,我可以想到堆栈溢出的两个可能原因:由于您显示的代码在 malloc 中,也许您有一个潜在的堆内存错误,它现在才出现在新环境中。如果它正在破坏堆栈的一部分,它可能看起来像溢出了。

或者,您可能会无意中无限递归(同样,可能是由于构建环境的细微变化)并且实际上用完了所有堆栈。无限递归可以非常快地用完堆栈空间。

关于c++ - win7 + vc7.1 + mfc = 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2698447/

相关文章:

c++ - 计算 cudaMalloc 的间距,如 cudaMallocPitch 中所示

C++程序——输入文本流

c# - .NET Standard 2.1 与 .NET Core 3.1 无法加载文件或程序集

visual-studio - Visual Studio C++ - 资源 View 空白?

c++ - 接受迭代器的初始化列表构造函数

c++ - 在 C++ 中读取带空格的字符串

c++ - 二叉搜索树左旋转

c++ - 从 STL 容器中删除元素时是否调用析构函数?

c# - 我可以将多维数据绑定(bind)到 C# 和 .NET 中的 DataGridView 吗?

visual-studio - VS 2017 颜色主题编辑器 - 如何更改 Intellisense 自动完成背景颜色