zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    js字符串空格和换行
    python resources
    -eous
    英语资源网站
    -iatry 没病走两步
    book corpus
    epub converters
    brainstorm detain
    craftsman
    parachute
  • 原文地址:https://www.cnblogs.com/corefans/p/1357845.html
Copyright © 2011-2022 走看看