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);
分享到:
相关推荐
Sentinel_LDK_Run-time_setup8.15
Sentinel HASP Run-time setup 是一个用于运行使用Aladdin HASP保护技术的软件的必备组件。这个RAR压缩包包含了运行时环境,特别是针对HASP(硬件安全模块)的模拟器,使得用户能够在没有物理HASP密钥的情况下测试或...
本文将深入探讨"Sentinel LDK Run-time cmd line - V8.31"这一版本,它与EPLAN软件的加密狗(Sentinel HASP)以及Windows 10 21H2操作系统的兼容性问题。 首先,Sentinel LDK(License Development Kit)是由Aladdin ...
Sentinel_LDK_Run-time_setup_7.92
标题 "Sentinel_LDK_C_Run-time_Install_API.zip_Run Time_Sentinel LDK_do" 提供的信息表明,这个压缩包包含的是Sentinel LDK(Sentinel License Development Kit)的C运行时安装API,用于在目标系统上运行Sentinel...
标题 "Unable to access HASP SRM Run-time Environment? (H0033)" 提到的问题是用户在尝试运行一个依赖于HASP SRM(Sentinel Runtime Environment)的应用程序时遇到了错误代码H0033。这个错误通常表示系统无法正确...
### Pascal Run-time Library (RTL) 知识点详解 #### 概述 Pascal Run-time Library(简称 RTL),是 Pascal 编程语言的核心库之一,它提供了大量的预定义过程、函数以及类型支持,使得程序员能够更高效地进行程序...
NI LabVIEW 2018 DSC Module Run-Time System1 NI LabVIEW 2018 DSC Module Run-Time System2 NI LabVIEW 2018 DSC Module Run-Time System3
Sentinel_LDK_Run-time_cmd_line_6.50.zip
开源项目-pingcap-tidb#run-as-mysql-protocol-server.zip,tidb mysql协议服务器已经发布,现在可以运行wordpress了。