最好的预防方法就是使用动态内存。
每个进程中的线程,其栈的空间是固定。但是这个固定是随系统改变的。假如只给你2M空间,你非得申请3M,那么就出现栈溢出。
在XP系统中,如果出现栈溢出,很有可能出现系统奔溃。(亲身经历了)。
常见的,
int g = 0; // 位于全局变量区
void fun()
{
static int s = 0; // 位于全局变量区
int a = 4; // 位于栈
char* p = new char[10]; // 位于堆
}
所以,为了避免出现栈溢出,最好的方法是使用动态内存。
那么如何检查呢。其实就是检查代码中是否有申请超大的栈内存。在VS中,可以通过打开代码分析功能来检查哪里有大量栈内存被申请。
工程---属性---C++--高级--代码分析
注:并不是所有的VS版本都有这个功能,VS2008团队版有。VS2017的社区版没有。
网友评论