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

函数调用跳转到错误的函数

如何解决《函数调用跳转到错误的函数》经验,为你挑选了2个好方法。

我在vs2008中编译一个c ++静态库,在解决方案中我也有一个使用lib的启动项目,并且工作正常.

但是当在另一个解决方案中使用lib时,我得到运行时检查失败."ESP的值没有在功能调用中正确保存"通过代码我注意到函数foo()在崩溃之前跳转到bar().有问题的函数只是常规函数而没有函数指针.

任何人都知道可能会发生什么,以及为什么它在使用同一解决方案中的lib时有效?

编辑:函数(方法)是类的一部分,如果有帮助的话.



1> Mr.Ree..:

请原谅我在这里说出明显的流血,但是......在对象(.o)和标题(.h)文件不同步之前,我已经看过很多次这种事情.特别是关于虚拟方法.

考虑:目标文件使用标头编译:

class Foo { virtual void f(); };

但随后标题变为:

class Foo { virtual void g(); virtual void f(); };

对于下一个目标文件,编译器关于f()在类的vtable中的位置的假设是不正确的.

通常只需重新编译世界(一切!)将有所帮助.



2> Arnout..:

这很可能是由于不兼容的调用约定,其中库和调用者对堆栈布局有不同的想法.

有关详细信息,请查看MSDN.

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