递归函数虽然方便好用,但是计算机可不太喜欢它啊~~今天深刻体会到~~~
写了个递归函数~
当输入值大到一定程度~~
显示段错误(核心已转储)~~度娘过后发现这种错误的原因无非这几个:1、内存访问出错 2、非法内存访问 3、栈溢出~~~~分析过后发现很大可能是栈溢出了
linux默认给以一个进程分配的栈空间大小为8M,调用递归函数时会把参数、返回地址、EBP压入堆栈,只有到最后结束点时才依次出栈。栈空间是固定的,
当调用多次时,新元素覆盖堆栈的老元素,如某个返回地址被覆盖掉了,CPU访问不存在的指令,结果出现错误,这就是堆栈溢出~~~~