Run-Time    Check    Failure    #2   
 
 
一般是栈被破坏,你的代码可能有缓冲区溢出一类的问题。

Run-Time Check Failure #2 - Stack around the variable 'var' was corrupted

摘要:

简介VC++.NET编译新功能,运行时错误检查,编译选项 (/RTC1, equiv. to /RTCsu)

最近把一个别人早期在VC 6下编写的一个服务移植到VC 7.1 (.NET 2003)时,突然跳出

好些运行时错误提示。

经过查询编译器和出错说明,发现了编译器的这一新特性,并修正了代码隐患:

//someheadefile.h

typedef struct tarSomeMessagePack

{

 
 
 
 
char moibleNumber[20];

 
 
 
 
....

}SomeMessagePack_T,*SomeMessagePack_Ptr;

细心的开发者可能已经发现,这里使用字符串数组下标越界了。即mobileNumber[]有效元素

下标为0到19,mobileNumber[20]是非法的。在VC 6下,编译运行并没有处任何问题,这也结

构体在内存字节对齐也有关系,实际上,mobileNumber[]在默认与8字节对齐的环境下编译链

接的,因此,后4个bit也不会被系统用到,即mobileNumber[20],mobileNumber[21],

mobileNumber[22],mobileNumber[23]系统把它空着。

尽管系统运行同几年都很正常,但

strncpy(pack.mobileNumber," ",20);

这样的代码也是危险的代码,要是有一天,把这个结构体字节对齐方式改为1,那么程序一定

在这里崩溃。

VC7.1为我们提供了一种机制,在编译选项中,增加(/RTC1, equiv. to /RTCsu)项选。当程序

运行到这里的时候,即会向我们报告这一错误。

查看相关文档,了解了这一块代码的真实意图后,我把代码改为

strncpy(pack.mobileNumber," ",19);

这一问题消失。

//someimplement.cpp

strncpy(pack.mobileNumber," ",20);

郑注:这就是一些变量的内存访问出错造成的,而且在错误对话框中明显的提出了是哪个变量访问出错,可以查这个变量得到结果。典型的错误:如定义了一个TCHAR Code[1];,结果在使用中使用到了Code[1],就产生了这个错误

最新文章

  1. Neutron 网络基本概念 - 每天5分钟玩转 OpenStack(66)
  2. 表达式括号匹配(stack)
  3. CodeForces Round#313
  4. xcode 创建项目 勾选 git 出现警告
  5. Windows7下Blend for Visual Studio 2012使用问题
  6. [BI基础] 一些不得不了解的概念
  7. MySQL主主复制+LVS+Keepalived实现MySQL高可用性1
  8. Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架
  9. 【★】SPF(Dijkstra)算法完美教程
  10. return false与return true的区别
  11. touch事件过程
  12. 在NOARCHIVELOG和ARCHIVELOG模式之间选择
  13. hiho#1513 : 小Hi的烦恼 五维偏序
  14. 使用XHProf查找PHP性能瓶颈
  15. tomcat没有编译重新编写的代码
  16. 搭建阿里云lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)
  17. 全网最详细的大数据集群环境下如何正确安装并配置多个不同版本的Cloudera Hue(图文详解)
  18. 大话C#中能使用foreach的集合的实现
  19. 从阿里Java开发手册学习线程池的正确创建方法
  20. 使用PHP生成二维码图像

热门文章

  1. Cordova 设置全屏及退出全屏切换
  2. CrystalDiskMark 的使用方法
  3. Xamarin 开发常见问题
  4. TDBGrideh表头自动排序设置
  5. How to hide TabPage from TabControl
  6. Programming Concepts
  7. 【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 二)
  8. Base64上传图片
  9. Devexpress 之gridControl双击行事件
  10. jquery mobile 前言