C/C++中栈的使用以及栈溢出

前言

        在C/C++中栈区都是非常重要的一个内存区域,它管理着自己编写的函数中的局部变量、返回值,参数等。由于栈的空间有限,因此,防止栈的溢出至关重要。栈的定义在这篇文章中已经详细说明https://blog.csdn.net/m0_59951855/article/details/134111927

正文

栈溢出定义

        栈溢出:使用栈内存时,向栈中写入超出其容量限制的数据,当向栈中不断压入数据,超过了栈的大小限制。栈溢出可能导致程序异常行为,包括程序崩溃,异常退出甚至安全漏洞。

产生原因

        (1)、使用递归调用时,层级越深,将会调用使用给更多的栈的空间,可能造成栈溢出。例如类似下方函数,当输入n过大时,会调用很多次自身,占用较多空间

//递归计算斐波那契数
long fib(int n) {

    if (n <= 2) {
        return l;
    else
        return fib(n - 1) + fib(n - 2)
}
}

        (2)、局部变量过量/过大,声明了大量的局部变量或者很大的数组。类似下方代码

int main()
{
    //占用栈内存,局部变量,太大,栈溢出
    double test[750][750];

    return 0; 
}
防止栈溢出的方法

        (1)、检查递归条件,防止输入过大的参数

        (2)、减少局部变量和数组的使用,可以开辟到堆区,不过不能忘记手动释放内存。

        (3)、增加栈的大小

        (4)、使用堆内存

 总结

        这里只是简单的介绍栈溢出相关的知识,在面试过程中已经可以应对,具体原理还需要详细理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一伦明悦

感谢,您的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值