当前位置:  开发笔记 > 编程语言 > 正文

C++ Visual Studio运行时错误

如何解决《C++VisualStudio运行时错误》经验,为你挑选了1个好方法。

任何人都可以向我解释这意味着什么?

"运行时检查失败#0 - ESP的值未在函数调用中正确保存.这通常是调用使用一个调用约定声明的函数,其中函数指针使用不同的调用约定声明."



1> xtofl..:

在调用函数时,编译器必须在堆栈上推送一些参数,或者将它们放在某些寄存器中.函数体将更改某些内存位置(或寄存器)以包含返回值.然后它将返回到堆栈上"某处"存储的位置的代码块.

调用约定指定具体细节:例如,首先按下返回地址,然后从左到右推送堆栈上的参数(输入或输出),然后执行函数,再次关闭参数,然后弹出返回地址并跳转到那个位置.

如果调用者以不同于函数期望的方式执行此操作,则可能会出错(返回位置不在预期的堆栈位置).

ESP通常是包含当前堆栈帧地址的寄存器.该寄存器与索引结合使用以获取函数体中的参数.返回时,堆栈顶部通常重置为ESP,处理器跳转到例如ESP + 1的位置.

可能导致这种情况发生的事情:

有人写了堆栈的值并更改了返回位置(例如缓冲区溢出)

调用者具有与被调用者不同的调用约定

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有