浅析stack around the variable was corrupted(含转的文章)

本文介绍了如何解决在C/C++编程中遇到的“Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted”错误。通过调整Visual Studio项目的配置属性,特别是基本运行时检查选项,可以有效避免此类错误的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在完成老师布置的课程设计时遇到了这样的错误:stack around the variable “XX” was corrupted.,中文翻译就是“在变量XX周围的堆栈已损坏”。后面在上网看了很多技术资料,发现大多数网站都有这样的文章:

Code:
  1. 把project->配置属性->c/c++->代码生成->基本运行时检查为默认值就不会报本异常。具体原因正在研究中。。。
  2. 如果改为其他就有exception。
  3. exception有时是有道理的
  4. //step1
  5. STRINGC2&STRINGC2::operator+=(constcharx)
  6. {
  7. //if(x==0)return*this;
  8. charptr[1];//maxis1digit
  9. ptr[0]=x;
  10. ptr[1]='/0';
  11. *this+=ptr;//offtostep2andback
  12. return*this;//step4crash
  13. }
  14. 这个也会导致上述exception。
  15. 问题描述:
  16. Problem
  17. ThefollowingerrormessageoccurswhenbuildingonTestRealTImeenvironmentwiththecvisual7TDP?
  18. Run-TimeCheckFailure#2-Stackaroundthevariable'xxx'wascorrupted.
  19. Cause
  20. Stackpointercorruptioniscausedwritingoutsidetheallocatedbufferinstackmemeory.
  21. Solution
  22. Thiskindoferrorisdetectedbysetting/RTC1compileroptionfrommenuProject->Settings->Configurationproperties->Build->Compiler->CompilerflagswhenusingTDPcvisual7inIBM®Rational®TestRealTimeenvironment..Thisenablesstackframerun-timeerrorchecking.Forexample,thefollowingcodemaycausetheaboveerrormessge.
  23. #include<stdio.h>
  24. #include<string.h>
  25. #defineBUFF_LEN11//12mayfixtheRun-TimeCheckFailure#2
  26. intrtc_option_test(char*pStr);
  27. intmain()
  28. {
  29. char*myStr="helloworld";
  30. rtc_option_test(myStr);
  31. return0;
  32. }
  33. intrtc_option_test(char*pStr)
  34. {
  35. charbuff[BUFF_LEN];
  36. strcpy(buff,pStr);//causeRun-TimeCheckFailure#2-Stackaround
  37. //thevariable'buff'wascorrupted.
  38. return0;
  39. }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值