现在的位置: 首页 > 综合 > 正文

关于对栈溢出的分析

2013年02月18日 ⁄ 综合 ⁄ 共 726字 ⁄ 字号 评论关闭

经常导致栈溢出的代码:
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; 
}

【上篇】
【下篇】

抱歉!评论已关闭.