堆栈溢出一般是由什么原因导致的?

 我来答
shine天马丶丶
高粉答主

2020-10-17 · 关注我不会让你失望
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:5.5万
展开全部

递归过程的局部变量过多、递归深度过大,是造成系统栈溢出的原因,特别是递归列循环时肯定会发生系统栈溢出。

递归堆栈溢出的解决方案是尾部递归优化。事实上,尾部递归和循环具有相同的效果,所以可以把循环看作是一个特殊的尾部递归函数

尾部递归,当函数返回时调用自身,并且返回语句不能包含表达式。通过这种方式,编译器或解释器可以优化尾部递归,这样递归本身无论被调用多少次,都只占用一个堆栈帧,而不会出现堆栈溢出。

扩展资料:

针对堆栈溢出可能造成的计算机安全问题,通常有以下这些防范措施:

1、强制代码遵循正确的规则。

2、使操作系统无法执行缓冲区,从而防止攻击者植入攻击代码。但是,由于攻击者不必求助于嵌入代码,而且Linux使用可执行的堆栈属性来发出信号和在线重用GCC,这种方法仍然有一些弱点。

3、利用编译器的边界检查实现缓冲区保护。这种方法使缓冲区溢出不可能发生,完全消除了缓冲区溢出的威胁,但是代价很高,比如性能较低。

4、对程序指针完整性进行检查,该方法可以防止绝大多数的缓冲区溢出攻击。这意味着在程序使用指针之前检查指针的内容是否已更改。

听不清啊
高粉答主

2015-07-27 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
递归过程的局部变量过多、递归深度过大,是造成系统栈溢出的原因,特别是递归列循环时肯定会发生系统栈溢出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梁昌仔
推荐于2017-09-27 · TA获得超过272个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:202万
展开全部
一般情况下,是读写数据超出来申的内存的范围。
堆栈溢出一般会报段错误
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式