代码改变世界

vs中 Stack around the variable 'XXX' was corrupted.

2019-10-28 11:26  youxin  阅读(548)  评论(0编辑  收藏  举报

 

https://blog.csdn.net/hou09tian/article/details/75042206

  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. }