vs/c++缓冲区溢出,未初始化变量检查

缓冲区溢出(buffer overrun)是c/c++开发中比较令人头痛的问题,vs2005中有若干编译选项

可以有效的帮助程序员定位这些问题:


1,/GS:优化模式下有效,检测缓冲区溢出,只能检测出覆盖了返回地址的情况.

2,/RTCs:优化模式下无效,检测缓冲区溢出

void  Test2()
{
   
char  buffer1[ 100 ];
   
char  buffer2[ 100 ];
   buffer1[
0 =   0 ;
   
for  ( int  i = 0  ; i  <=   sizeof (buffer2); i ++ )
   {
      buffer2[i] 
=   ' a ' ;
   }
   buffer2[
sizeof (buffer2) - 1 =   0 ; // 检测出buffer2溢出,上面的for中应该使用<而不是<=
   cout  <<  buffer2  <<   ' - '   <<  buffer1  <<  endl;
}

 

注:以上方法只能检测栈中的内存溢出,对于堆的内存(new出来的内存)溢出无效.


3,/RTCc: 优化模式下无效,可以检测出数据截断的情况

void  Test5( int  value)
{
   unsigned 
char  ch;
   ch 
=  (unsigned  char )value; // 检测出错误!
}

 

4,/RTCu:优化模式下无效,检测使用未初始化的变量

void  test()
{
    
int  i;
    
int  k  =  i  *   100 // 检测出错误!
}

 


参考:
1,http://msdn.microsoft.com/en-us/library/aa289171.aspx
2,http://msdn.microsoft.com/en-us/library/aa290051.aspx

转载于:https://www.cnblogs.com/corefans/archive/2008/12/18/1357845.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值