stack around variable ## was corrupted问题


不知道大家写程序的时候会不会发现有时候程序运行时会崩溃,然后就会出现一句这样的话:
      Run-time check failure #2-stack around variable ## was corrupted(我使用的编程软件是vs2012)
通常这种情况大多数是因为我们的代码有逻辑错误,最普遍的问题就是产生了越界问题。
     比如下面代码的例子:
     int main()
{
 char str[6]={};
 char* str1="abcdefg";
 strcpy(str,str1);//error,产生了越界
 strcat(str,str1);//error,产生了越界
}
      在这个代码中,我们用到了头文件string.h中两个函数,这个函数确实也是存在越界的问题,在上面的代码中我str不够大,不能完全接受str1里的东西,所以在运行时,vs会报一个这样的错误 
      这个就是典型的越界问题,因为这两个函数确实是不太安全,大家可以用它的安全版本或者自己实现,如果嫌麻烦的话,一定要看清楚他们的要求,注意不要越界了。
      这是能发现的明显的错误情况,但是我写2048这个小游戏的时候,在最后玩到格子里都放满了数据的时候,也会出现这个问题,但是我为了改这个bug挣扎了很久,一直没有发现问题在哪,我定义了两个数组,每个数组的访问都是检查检查再检查,特别是在i+1,i-1,j+1,j-1这些容易发生边界错误的地方,都没有检查出来问题。后来我上网看了很多大神的博客,发现他们在写一些程序的时候也会遇到这样的问题,特别是那种变量较多,消耗栈的空间较大的程序中更容易遇到这样的问题。如果你检查实在是觉得自己的程序没有问题可以试试下面的方法:
    1、按alt+f7进入属性页

2、在c/c++下面点击代码生成,就会出现上面的页面

3、在基本运行时检查点击默认值(因为关于栈的检查可能就是由于两者(/RTC1,等同于 /RTCsu) (/RTC1)这个限制栈的大小)

我的问题就是通过这个方法得到了解决。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值