博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅析stack around the variable was corrupted
阅读量:2383 次
发布时间:2019-05-10

本文共 1733 字,大约阅读时间需要 5 分钟。

错误: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)在内部就限定了堆栈的大小,当项目足够大的时候,就会溢出。

转载地址:http://bnuab.baihongyu.com/

你可能感兴趣的文章
php-cgi服务启动、管理、运维
查看>>
Nginx location 和 rewrite retry
查看>>
基于nginx的FastCGI的缓存配置
查看>>
Nginx模块fastcgi_cache的几个注意点
查看>>
PHP使用curl伪造IP地址和header信息
查看>>
代理服务器中的HTTP代理与SOCKS代理有什么区别?
查看>>
CURLOPT_HTTPPROXYTUNNEL参数的意义
查看>>
CURL 奇怪的403错误
查看>>
django邮件乱码解决方案
查看>>
django中文乱码终极解决方案
查看>>
python 的log功能
查看>>
django 日志配置和使用
查看>>
Django分页的基本实现办法
查看>>
django 文件上传
查看>>
ptyon urlib2
查看>>
django 模板中使用配置参数
查看>>
django admin扩展-自定义后台管理界面
查看>>
django 非常实用的无限级分类功能
查看>>
百度地图api实例练习
查看>>
百度地图-非常实用的搜索自定义
查看>>