经常导致栈溢出的代码:
1: strcpy(,,,,),当给的目标缓冲不够大时.
及别人类似于strcpy的函数.
2: int tmp[3]
tmp[0] = 0;
tmp[1] = 1;
tmp[2] = 2;
tmp[3] = 3; // 注意,此时栈溢出!!!
关于编译器的栈的大小的设置见 VS2003编译器使用技巧大全中
////////////////////////
栈的大小有一个默认的值,局部变量,调用函数的现场保存信息都存于栈上.
通过情况下,栈溢出时,程序仍可以顺利运行...
有以下情况时例外:
1:当有很深的递归时,随着函数层数的增加,栈会被用完,这时,函数的返回值信息便会写到栈外的空间. 栈个的空间的地方可以被别的函数改写.这样,原来的函数的返回地址就会被改写!!!,函数被返回到黑客定制的地方!
2:同理,当在栈上分配的空间过大时,超出去的空间的数据就会被改写.
/////////
另外我的两个疑问:
1:无论我也栈的大小设为多少,VS2003下,我的代码的递归深度都是110层,这是为何?
ps:我曾把stack设为10与10000,结果都一样.
// my code:
#include "stdafx.h"
#include "iostream"
using namespace std;
int Num=1;
int b=0;
void getNum()
{
if(Num>2000)return;
++Num;
cout<<Num<<endl;
int a[500];
getNum();
b++;
}
int _tmain(int argc, _TCHAR* argv[])
{
int b[100];
getNum();
int k=0;
cin>>k;
return 0;
}