• 关于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 

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

  • 相关阅读:
    牛牛与LCM(最小公约数)
    小明的挖矿之旅_牛客网(思维题)
    2019/4/20周赛 F题 CodeForces
    哥德巴赫猜想_2019/7/11_牛客网
    智障操作-wireless AC 9462
    codeforces762A
    2019中山大学程序设计竞赛(重现赛)斐波那契/
    Java自学笔记(10):【面向对象 】 类和对象、构造方法、this关键字
    Java自学笔记(9):方法
    Java自学笔记(8):多维数组
  • 原文地址:https://www.cnblogs.com/flysnail/p/2184114.html
Copyright © 2020-2023  润新知