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/p/1357845.html