前端之家收集整理的这篇文章主要介绍了
学习C:C中堆栈下溢的示例,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在
调用和从
方法调用返回的情况下,C中的一个简单示例可能会导致堆栈下溢.我熟悉这个
调用约定,即这个
调用方式,即这个cdcall和cdecl以及它们将清理栈的方式.具体来说,不会堆栈下溢由编译器
自动为我
生成的
代码?
什么情况可以让我陷入麻烦的堆栈下溢?
我可以看到实际发生的唯一
方法是,如果您声明使用stdcall(或任何其他
调用约定来指定被
调用程序清理堆栈)的
函数,然后通过指定为cdecl的
函数指针来
调用该
函数(或任何其他
调用约定,其中堆栈被
调用者清理).如果这样做,被
调用的
函数将在返回之前弹出堆栈,然后
调用者也会弹出堆栈,导致下溢和可怕的事情.
在成员函数的具体情况下,调用约定通常被称为thiscall,调用者或被调用方是否清除堆栈,这取决于编译器.
有关呼叫约定的详细信息,请参见here.
原文链接:https://www.f2er.com/c/115727.html