zoukankan      html  css  js  c++  java
  • 关于stack around the variable “” was corrupted问题

    错误:stack around the variable “XX” was corrupted.,中文翻译就是“在变量XX周围的堆栈已损坏”。后面在上网看了很多技术资料,发现大多数网站都有这样的文章:

    Code:
    1. 把 project->配置属性->c/c++->代码生成->基本运行时检查 为 默认值 就不会报本异常。具体原因正在研究中。。。    
    2. 如果改为其他就有exception。    
    3. exception有时是有道理的    
    4. // step 1   
    5. STRINGC2& STRINGC2::operator += (const char x)   
    6. {   
    7. // if (x == 0) return *this;    
    8. char ptr[1]; // max is 1 digit    
    9. ptr[0] = x;   
    10. ptr[1] = '/0';   
    11. *this += ptr; // off to step 2 and back    
    12. return *this// step 4 crash   
    13. }   
    14. 这个也会导致上述exception。    
    15.   
    16. 问题描述:    
    17. Problem   
    18.     
    19. The following error message occurs when building on Test RealTIme environment with the cvisual7 TDP?    
    20. Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted.     
    21.     
    22. Cause     
    23. Stack pointer corruption is caused writing outside the allocated buffer in stack memeory.    
    24.     
    25. Solution    
    26. This kind of error is detected by setting /RTC1 compiler option from menu Project -> Settings -> Configuration properties -> Build -> Compiler -> Compiler flags when using TDP cvisual7 in IBM® Rational® Test RealTime environment.. This enables stack frame run-time error checking. For example, the following code may cause the above error messge.    
    27. #include <stdio.h>   
    28. #include <string.h>    
    29. #define BUFF_LEN 11 // 12 may fix the Run-Time Check Failure #2   
    30. int rtc_option_test(char * pStr);    
    31. int main()   
    32. {   
    33. char * myStr = "hello world";   
    34. rtc_option_test(myStr);   
    35. return 0;   
    36. }    
    37. int rtc_option_test(char * pStr)   
    38. {   
    39. char buff[BUFF_LEN];   
    40. strcpy(buff, pStr); //cause Run-Time Check Failure #2 - Stack around   
    41. //the variable 'buff' was corrupted.   
    42. return 0;   
    43. }   
    44.   

    把“project->配置属性->c/c++->代码生成->基本运行时检查 设置为默认值,就没有这样的错误了。关于MSDN的解释是在堆栈外面读写某数据。错误是名为RTC1的编译器检测的。又看了更多的技术文章,发现这样的错误是程序员在项目到了一定大的时候,它占用的堆栈量就比较大。我也深有体会。因为自己本来编写一个类,运行时没有错,但是在添加成员属性的时候,在其它方式不变的情况下就容易发生这样的错误。所以据此我猜应该是VS2005(2008)在内部就限定了堆栈的大小,当项目足够大的时候,就会溢出。

     

    以上是理论部分。

    #define BUFF_LEN 11 // 12 may fix the Run-Time Check Failure #2 

    问题原因在这里,存在字符越界。

  • 相关阅读:
    ES6标准入门之正则表达式的拓展
    将博客搬至CSDN
    CUDA杂谈
    QT源码解析笔记
    图解DTS和PTS
    图解 I帧,B帧以及P帧
    这半年的一些事情
    C++的一些编程规范
    pjsip与QT进行适配
    编程规范检测脚本
  • 原文地址:https://www.cnblogs.com/flysnail/p/2184114.html
Copyright © 2011-2022 走看看