学习C:C中堆栈下溢的示例

前端之家收集整理的这篇文章主要介绍了学习C:C中堆栈下溢的示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
调用和从方法调用返回的情况下,C中的一个简单示例可能会导致堆栈下溢.我熟悉这个调用约定,即这个调用方式,即这个cdcall和cdecl以及它们将清理栈的方式.具体来说,不会堆栈下溢由编译器自动为我生成代码

什么情况可以让我陷入麻烦的堆栈下溢?

解决方法

我可以看到实际发生的唯一方法是,如果您声明使用stdcall(或任何其他调用约定来指定被调用程序清理堆栈)的函数,然后通过指定为cdecl的函数指针来调用函数(或任何其他调用约定,其中堆栈被调用者清理).如果这样做,被调用函数将在返回之前弹出堆栈,然后调用者也会弹出堆栈,导致下溢和可怕的事情.

在成员函数的具体情况下,调用约定通常被称为thiscall,调用者或被调用方是否清除堆栈,这取决于编译器.

有关呼叫约定的详细信息,请参见here.

猜你在找的C&C++相关文章