今天在排查一个导致程序奔溃的bug,经调试发现其中的原因:代码中使用到CTreeCtrl树控件,控件中有上千个节点,代码中为实现相关的应用,需要递归遍历整个树控件,从而导致栈溢出的问题。
那么过多的递归调用为什么会引起栈溢出呢?事实上,函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。而递归调用,只有走到最后的结束点后函数才能依次退出,而未到达最后的结束点之前,占用的栈空间一直没有释放,如果递归调用次数过多,就可能导致占用的栈资源超过线程的最大值,从而导致栈溢出,导致程序的异常退出。