栈溢出的原因以及解决方法

2022-01-21 92 0

栈溢出是指函数中的局部变量造成的溢出(注:函数中形参和函数中的局部变量存放在栈上)栈的大小通常是1M-2M,所以栈溢出包含两种情况,一是分配的的大小超过栈的最大值,二是分配的大小没有超过最大值,但是接收的buf比原buf小。函数调用层次过深,每调用一次,函数的参数、局部变量等信息就压一次栈局部变量体积太大。

解决办法大致说来也有两种:

增加栈内存的数目;如果是不超过栈大小但是分配值小的,就增大分配的大小

使用堆内存;具体实现由很多种方法可以直接把数组定义改成指针,然后动态申请内存;也可以把局部变量变成全局变量,一个偷懒的办法是直接在定义前边加个static,直接变成静态变量(实质就是全局变量)

相关文章

简述 private、 protected、 public、internal 修饰符的访问权限
new和malloc的区别
堆和栈的区别?
构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
什么情况下会调用拷贝构造函数?
介绍下抽象类、接口类、聚合类?

发布评论