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

Arc*_*hon 13 c++ static visual-studio-2008 stack-pointer

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

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

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

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

Mr.*_*Ree 15

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

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

class Foo { virtual void f(); };
Run Code Online (Sandbox Code Playgroud)

但随后标题变为:

class Foo { virtual void g(); virtual void f(); };
Run Code Online (Sandbox Code Playgroud)

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

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


Arn*_*out 7

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

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