解除 Run-Time Check Failure #2

本文介绍了在VC++.NET中遇到的Run-Time Check Failure #2错误,详细分析了该错误的原因,涉及结构体内存字节对齐问题,以及如何通过编译选项(/RTC1)来启用运行时错误检查。通过示例代码展示了如何修正可能导致崩溃的潜在问题。
摘要由CSDN通过智能技术生成

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," 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值