什么是栈溢出?
栈溢出是由于
C
语言
系列没有内置检查机制来确保复制到缓冲区的
数据
不得大于缓冲区的
大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围。
之前做了数据统计,看了报错日志,发现有个栈溢出,报错如下

根据错误提示找到接口,
经排查发现,是因为局部变量
userIds
集合过大,又把
userIds
传入
sql
使用
foreach
循环
拼接
USER_ID
,导致占用的栈空间越来越大,最后超过了设置的栈空间设置的大小,错误
抛出。
哪些操作能引起栈溢出?
1.
局部变量空间太大【局部变量是存储在栈中的】
2.
函数出现无限递归调用
3.
大量的循环或者死循环
4.
局部变量过多
经验教训:
经过这次经历,发现规范代码确实很重要,可以避免一些 “生产事故” 。这就应了那句
“代码不规范,同事两行泪”😭