栈溢出预防、检查

2018-11-02  本文已影响0人  肥树仙僧

最好的预防方法就是使用动态内存

每个进程中的线程,其栈的空间是固定。但是这个固定是随系统改变的。假如只给你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的社区版没有。

上一篇下一篇

猜你喜欢

热点阅读