"The value of ESP was not properly saved across a function call."问题
"The value of ESP was not properly saved across a function call." problem
可能重复:
奇怪的MSC 8.0错误:“ESP的值未通过函数调用…正确保存”
我有一个OBJ文件,我没有任何源代码。我在另一个项目中使用过它,没有任何问题。现在我正试图在另一个项目中使用它。这是我申报的方式:
extern "C" bool FileCompare(char* file1, char* file2);
我把它用在这样的函数中:
void myFunction() {
//some code
FileCompare(file1, file2); // file1 and 2 are char arrays
}
然后在我的主代码中,我调用myFunction:
int main() {
... some code
myFunction()
}
当myFunction返回时,我在Visual Studio 2010调试器中得到"ESP的值未在函数调用中正确保存。"。然而,我知道FileCompares(obj文件中的函数)完成了它的工作。当我评论出来的时候,一切都很好。我过去使用过这个OBJ文件,没有遇到任何问题。考虑到我没有obj文件的来源,我能做些什么来尝试"修补"这个问题吗?
非常感谢
更多细节:我怀疑代码使用了不带RET的CALL(它是在程序集中编写的)。
编辑:我不知道我说的话对事情的工作方式是否有意义,但既然函数损坏了,esp无论如何都可以保存它,并在函数返回后恢复它?
这可能是由于FileCompare()
中的错误,或者myFunction()
和/或FileCompare()
的声明和实现之间的调用约定不匹配。
您可以在FileCompare()
的原型上使用适当的说明符(比如__cdecl
)来解决这个问题。或者,您可能需要为FileCompare()
函数创建一个汇编语言包装器来修复问题(因为您说您不再拥有FileCompare()
的源代码)。
要想在没有FileCompare()
源代码的情况下准确地找出问题所在,可能需要在调试器中逐步完成程序集。
有一次,当我用旧的头文件编译一个项目时,我遇到了类似的问题,这个头文件与最新的头文件相差一个虚拟函数。
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- "no matching function for call to 'Vector::Vector'"错误
- 如何在向量中删除 std::function<void()>?
- 不断"Attempting to reference a deleted function"
- 将函数包装器转换为 std::function
- 类型擦除的std::function与虚拟函数调用的开销
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- 如果模板没有可变参数,则 Lambda 被推导出为 std::function
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 模板规范获取'Ambiguous call to overloaded function'
- "The value of ESP was not properly saved across a function call."问题
- 奇怪的 MSC 8.0 错误:"The value of ESP was not properly saved across a function call..."