对Run-Time Check Failure #3 - The variable 'a' is being used without being initialized.的处理以及理解
2016-04-21 01:24
429 查看
对于这个问题,我们先来看一个简单的C程序:
你们猜猜运行结果是什么?在VS下直接崩溃。。。
然后我又用VC和Linux下GCC测试,结果分别为-858993460和随机值。
于是。。。(懵逼)
通过分析,发现这与RTC(Run-Time Check,运行时检查)机制有关(以下都是以VS2012为标准)。
首先普及一下RTC(Run-Time Check)机制,包括堆栈帧(RTCS)、未初始化变量(RTCu)、两者都有、以及默认值四种。
在VS2012编译器中,项目-》属性-》配置属性-》C/C++ -》生成代码-》基本运行时检测 下有。
1.当开启RTCu(对未初始化变量运行时的检查)时,程序会崩溃。提示错误RTC Failure#3:使用了未初始化的变量
2.当开启RTCs(对堆栈帧运行时的检查)时,可以运行,结果为固定值,针对以上程序,结果为-858993460(%d打印),0xcccccccc(%#x打印)。实际上调用Fun2()开辟新栈帧时,栈帧被0xcc初始化,打印出来的结果如上。
3.当两者都开启时,与情况一一样,程序崩溃。提示错误RTC Failure#3:使用了未初始化的变量
4.当使用默认值时,程序可以运行,结果为相对应位置的值。例如本程序中结果为48,若程序Fun1()函数中只有一个变量,值为多少,结果就为多少。说白了,函数Fun2()中变量a的值与其本身无关,而与相对应的内存中存放的值有关。原因是默认值这种模式,当有新的栈帧开辟时,不会有0xcc这个初始化的过程。
以下为本人对如上问题的理解,如有偏颇,希望同仁批评指正,谢谢!
转载自:/article/10601511.html
#include <stdio.h> void Fun1() { int a = 48; } void Fun2() { int a; printf("%d\n",a); } int main() { Fun1(); Fun2(); return 0; }
你们猜猜运行结果是什么?在VS下直接崩溃。。。
然后我又用VC和Linux下GCC测试,结果分别为-858993460和随机值。
于是。。。(懵逼)
通过分析,发现这与RTC(Run-Time Check,运行时检查)机制有关(以下都是以VS2012为标准)。
首先普及一下RTC(Run-Time Check)机制,包括堆栈帧(RTCS)、未初始化变量(RTCu)、两者都有、以及默认值四种。
在VS2012编译器中,项目-》属性-》配置属性-》C/C++ -》生成代码-》基本运行时检测 下有。
1.当开启RTCu(对未初始化变量运行时的检查)时,程序会崩溃。提示错误RTC Failure#3:使用了未初始化的变量
2.当开启RTCs(对堆栈帧运行时的检查)时,可以运行,结果为固定值,针对以上程序,结果为-858993460(%d打印),0xcccccccc(%#x打印)。实际上调用Fun2()开辟新栈帧时,栈帧被0xcc初始化,打印出来的结果如上。
3.当两者都开启时,与情况一一样,程序崩溃。提示错误RTC Failure#3:使用了未初始化的变量
4.当使用默认值时,程序可以运行,结果为相对应位置的值。例如本程序中结果为48,若程序Fun1()函数中只有一个变量,值为多少,结果就为多少。说白了,函数Fun2()中变量a的值与其本身无关,而与相对应的内存中存放的值有关。原因是默认值这种模式,当有新的栈帧开辟时,不会有0xcc这个初始化的过程。
以下为本人对如上问题的理解,如有偏颇,希望同仁批评指正,谢谢!
转载自:/article/10601511.html
相关文章推荐
- Paint和Canvas
- poj 2709 Painter
- 严重: WSSERVLET11: failed to parse runtime descriptor: The serviceName cannot be retrieved from an int
- 使用AirDrop分享
- 在其他class或者view中获取MainActivity实例,以便调用其函数的方法:
- zoj-3923- In the Rain
- hdu1867 A + B for you again(kmp)
- 【卡特兰数+高精度】HDU1023Train Problem II
- POJ 3735 Training little cats(矩阵快速幂)
- POJ 3735 Training little cats(矩阵快速幂)
- LightOj 1076 - Get the Containers (折半枚举好题)
- Codeforces Beta Round #29 (Div. 2, Codeforces format) C. Mail Stamps 拓扑排序
- firefox的plugin-container.exe进程如何关闭?
- LightOJ--1076--Get the Containers(二分好题)
- 第五届ACM大学生程序设计竞赛:angry_birds_again_and_again
- sleep与wait的区别
- *** 安全沙箱冲突 *** 到 127.0.0.1:9999 的连接已停止 - 不允许从 file:///E:/flash/Flash/Vod/tag/Letvcloud__MainVodNew/bin-debug/Player.swf 进行连接
- HDU 2476 String painter 区间DP
- Elasticsearch - 理解字段分析过程(_analyze与_explain)
- Adobe Illustrator CS5 (AI软件) 免费精简中文版