在函数递归中,当实现一个最简单的函数递归,如下:
int main(){
printf("hello");
main();
return 0;
}
在上述代码块中,main函数中打印完hello之后又不断调用main函数,导致一直打印hello,打印到一定时间,系统会报错(在dev c++中只会单纯地停下),错误如下(在vs2012中呈现):
而上述错误Stack overflow的意思是栈溢出。
而了解栈溢出就需要了解内存的分区
内存在工作时可以分为栈区去,堆区和静态区:
堆区存放局部变量和函数形参;堆区存放动态开辟内存,如malloc,calloc;静态区存放全局变量如static修饰的变量。
在调用函数时,main函数向栈区申请一个空间,在main函数中又调用main函数,即又向栈区申请一个空间,直到占满栈区,便会出现栈溢出。



