Visual C++ RunTime的特征——非烫即屯

大一刚学C语言,第二次上机课,当我发现我照着书抄写的程序在运行之外的黑框里面跳出一排“烫烫烫烫烫”,当时就震惊了。你们能想象一个来自小城, 在大学之前没有怎么接触过电脑更不懂代码的孩子当时内心的恐惧吗?我真的以为是这是电脑过热发出来的警告,于是我弯下腰把插头拔了。
——————————————————————————————

VC runtime debug
version会把stack初始化成0xcc,unicode中0xcccc(双字节)就是中文的烫。如果你开了个char[],然后最后一个字符忘了
设置成0x00,然后去printf这个字符,那么整个stack从这个局部字符数组开始都输出到console,就变成了“烫烫烫烫烫”。

为啥把stack初始化成0xcc而不是0x00呢?是因为0xcc
在intel x86芯片指令集中代表int
3,也就是debug中断,该指令会自动把程序停在单步调试状态,然后去寻找系统中注册的调试器,如果找不到调试器,那么就会终止程序。这一开始是为了调
试栈缓冲溢出错误的。如果出现溢出,并且代码尝试执行缓冲中的指令,就会进入单步调试状态。

这是debug version, 那么release verion呢?发布版会把栈初始化成0xcd,这个就是imm8,就是立即中断退出的意思。这时候因为运行在用户机器上,没有调试器,也不希望用户来调试你的程序。0xcdcd就是中文的“屯”字。你会看见一些写的超烂的程序经常会出现“屯屯屯屯屯屯”。的确挺屯的,F。

在今天这个芯片DEP,操作系统NX锁定双保险的时代,这种初始化已经没有啥必要了,这个烫屯还存在纯粹是历史原因。

所以在俺们那个电脑还比较古早的年代,说人人品不好,那叫非奸即盗。说程序写的烂,那叫非烫即屯。

参考:
http://www.ccthere.com/article/4019197

——————————————————————————————

通过实测,我认为确实如上所说,所以自己必须要在构造函数中初始化。
如果没有初始化就会出事情(就会默认初始化成0xcdcdcdcd),比如在.h文件中定义:
int* m_test;

在析构函数里写上:
MyClass::~MyClass()
{
if (m_test)
delete m_test;
}
天杀的,居然会执行delete语句,然后程序报错,所以同志们要千万小心啊!!

——————————————————————————————

int xxx;
printf(" xxx = %d", xxx);
int* ddd;
printf("%d", ddd);
ddd = new int(10);
printf("%d", ddd);

面这段代码Debug模式下的运行结果是,xxx是一个随机值1366087313(每次运行还是固定值,估计是OS整体内存使用情况不变的缘
故),ddd的值是随机值0x00000100(每次运行还是固定值),但是m_test的值是0xcdcdcdcd,不是0xcccccccc,不知道
为什么(问题1)。
后来又运行了几个软件,这时xxx的值变成了255841937,但ddd的值仍是0x00000100(问题2)。

注:以上调试都是VS2008sp1 + Qt程序下调试。

【原文地址:http://www.cnblogs.com/findumars/p/4003800.html】

[转]Visual C++ RunTime的特征——非烫即屯的更多相关文章

  1. Visual C++ RunTime的特征——非烫即屯

    Visual C++ RunTime的特征——非烫即屯 大一刚学C语言,第二次上机课,当我发现我照着书抄写的程序在运行之外的黑框里面跳出一排“烫烫烫烫烫”,当时就震惊了.你们能想象一个来自小城,在大学 ...

  2. Arcmap 安装完后使用出现visual fortran run-time error的解决方法

    今天将ArcGIS安装到自己的XP笔记本上,安装过程一帆风顺,但打开Arcmap使用的时候,出现了visual fortran run-time error. 下面是解决方法: 下载个Dforrt.d ...

  3. Microsoft Visual C++ Runtime error解决方法

    1: 当出现下图时提示Microsoft Visual C++ Runtime error 2:此时不要关闭该对话框,然后打开任务管理器(Ctrl+Shift+Esc)如下图: 找到Microsoft ...

  4. Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

    打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...

  5. Microsoft Visual C++ Runtime Library Runtime Error解决的方式

    打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...

  6. Microsoft Visual C++ Runtime library not enough space for thread data

    Microsoft Visual C++ Runtime library not enough space for thread data     电脑最近一直在运行的时候,弹出提示框,如下: 解决办 ...

  7. 微软Visual Studio Code基本特征

    Visual Studio Code它的核心功能还是作为一个代码编辑器.和其他的代码编辑器一样,VScode采取通用的UI和布局,浏览器在左边,显示所有的文件和文件夹,右边你打开的文件的编辑页面. 文 ...

  8. VC中出现“烫”和“屯”的原因(栈区的每一个字节都被0xCC填充了,也就是int 3h的机器码,动态分配的堆,VC的Debug用0xCD填充堆的空间,就出现了“屯”)

    相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面让我解释 ...

  9. 为什么VC经常输出烫烫烫烫烫烫烫烫

    为什么VC经常输出烫烫烫烫烫烫烫烫 2012-05-07 11:52 by Rollen Holt, 12747 阅读, 4 评论, 收藏, 编辑 在Debug 模式下, VC 会把未初始化的栈内存全 ...

随机推荐

  1. Elasticsearch学习之深入搜索一 --- 提高查询的精准度

    1. 为帖子增加标题字段 POST /forum/article/_bulk { "} } { "doc" : {"title" : "th ...

  2. 【CF603E】Pastoral Oddities cdq分治+并查集

    [CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...

  3. C# XML对象序列化、反序列化

    XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从XML中读取数据. 最简单的方法就是.net framework提供 ...

  4. java不足前面补0

    // 0 代表前面补充0 // 3代表长度为3 // d 代表参数为正数型 result=String.format("%0"+3+"d",result);

  5. 04 用户个人信息和二次开发django的文件存储系统

    用户的个人信息的前端页面如下: 业务逻辑分析 从上图中可以看出,需要后端传送的数据有,用户的名字和练习的地址,和最近的浏览记录. 用户的名字和联系的地址可以通过地址表(adress)中获得,地址表可以 ...

  6. Django之forms

    Django forms 关于select和checkbox设置初始选中值 Django的forms和models一样很牛逼.他有两种功能,一是生成form表单,还有就是form表单的验证. 这里主要 ...

  7. 8.21 js

    2018-8-21 20:05:43 2018-8-21 20:56:30 明天再看!!!! 今天空闲多看了书 <百年孤独> <苏东坡传> 打印结果  shanghai js的 ...

  8. POJ1797 Heavy Transpotation

    Background  Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bu ...

  9. 【转】.NET 应用程序是怎么运行的

    原文:http://www.cnblogs.com/xishuai/p/mono-dotnetcore.html  .NET应用程序运行过程 C#程序运行过程 CLR结构

  10. HIT 2715 - Matrix3 - [最小费用最大流][数组模拟邻接表MCMF模板]

    题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2715 Time limit : 5 sec Memory limit : 64 M Zhouguyue ...