烫烫烫屯屯屯 那些事
在 Windows 上用 VC6 或者 VS 做过 C\C++ 开发的人都见过这些个有点奇怪并且还略带搞笑的字眼。
"烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫"------------未被初始化的栈内存
"屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯"----------------未被初始化的堆内存
很多初学者虽然经常遇到,但是并不知道这是什么梗。
其实 “烫” 和 “屯” 都是按照 GBK 编码显示的结果,对应的十六进制分别为 0xcccc, 0xcdcd
这是微软 C\C++ 编译器在 debug 模式下,引入的一种内存保护机制,会给特定的内存赋一个特定的初值。
具体怎么赋值,赋一个什么值呢? 我来列举一下常见的几种。
1. 0XCC
未被初始化的栈内存,会被写入 0XCC 。
例:
2. 0XCD
未被初始化的堆内存,会被写入 0XCD
例:
这里 d 的值为 0x00CA56B8, 可以看出,它指向的内存为cdcdcd...
这里 e 的值为 0x00C45468, 可以看出,它指向的内存也为cdcdcd...
3. 0XFD
堆内存的周围(前后各 4 个 Byte),会被写入 0XFD
这个区域被称为 “无人区”,写入 0XFD, 相当于是加了 Fence,用于检测数组越界。
还是前面的例子。
4. 0XDD
被销毁的堆内存,会被写入 0XDD 。
例:
除了上面的这些,还有一些特定字符会被用到,如 0XBAADFOOD, 0XABABABAB, 0XFEEEFEEE, 0XDEADBEEF 等,因为不常出现,这里就不细说了。
微软之所以这么做,除了内存保护,我想还为了调试方便,给它们一个确定的值而不是随机值,这样可以每次运行都是相同的结果。
说了这么多,只是想让大家理解编译器的行为。当然,不同的编译器,会有不同的行为,例如 gcc, 就不会给未初始化的变量赋初值,一切都是随机的。
最后,提醒大家
一定不要忘记初始化变量
new\delete, malloc\free 配套使用
delete\free 之后,要让指针为 null
警惕数组越界
避免野指针
烫烫烫屯屯屯 那些事相关推荐
- 手持两把锟斤拷,口中疾呼烫烫烫。 脚踏千朵屯屯屯,笑看万物锘锘锘。
锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACT ...
- 手持两把锟斤拷, 口中疾呼烫烫烫, 脚踏千朵屯屯屯, 笑看万物锘锘锘
锟斤拷的来历 GBK与UTF-8 Unicode和老编码体系的转化进程中,一定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLAC ...
- 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘
锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACT ...
- 你的C++为什么‘烫‘了,又为什么‘屯‘了?
你是不是有过这样的经历?写C/C++的时候,出现这种奇怪的字符串,比如出现如下字符 然后还出现这种字符串 你回头一看,最终发现了问题,肯定是下面这两种问题. 出现'烫'的时候,是你声明了一个char数 ...
- 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。
233333 TA 学编程时爱看的书籍封面是? 各种各样的动物 21 天精通 XXX 現役女子大生(秘)リアルセックス 03 转载于:https://www.cnblogs.com/guangshan ...
- 移动硬盘运行linux很烫,硬盘烫手正常吗
硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成.碟片外覆盖有铁磁性材料.下面是小编带来的关于硬盘烫手正常吗的内容,欢迎阅读! 硬盘烫手正常吗: 主要是因为硬盘的运行其实是在告诉旋 ...
- 烫烫烫和屯屯屯2021
malloc屯屯屯 #include <stdio.h> #include <stdlib.h>int main(int argc, char **argv) {void *p ...
- 烫烫烫、屯屯屯、锟斤拷、诺诺诺的简单示例代码
手持两把锟斤拷, 口中疾呼烫烫烫. 脚踏千朵屯屯屯, 笑看万物锘锘锘. 烫烫烫 简单点说,最常见的就是 数组没初始化 并且按照%s 输出了. #include<stdio.h> int m ...
- 不识烫烫烫屯屯屯,还说是攻城狮?
作为一名码农,想必都知道Hello World,什么,你竟然不知道?哦,那你可能不是码农,抬走,下一个. 言归正传,在码农界,存在一首打油诗,我带大家一道欣赏. 手持两把锟斤拷, 口中疾呼烫烫烫. 脚 ...
最新文章
- Docker(十):Docker实战 Docker 安装 Nginx
- 使用缓存防击穿,解决微信”被动回复用户消息”重试回复问题
- edusoho linux 500错误,EduSoho网校系统如何处理500 Internal Server Error?
-
EduSoho官网
- 【Codeforces - 769D】k-Interesting Pairs Of Integers(暴力,统计,思维,数学,异或)
- java容器相关问题
- hp-ux ftp启动_您可以做12项免费的事情来快速启动UX设计事业
- imac java7下载地址,如何在苹果电脑上安装JAVA开发工具,经验告诉你该这样
- 捡起JavaScript(3)
- 很实用的小功能,通过配置Web.xml让点击文件路径的超链接,直接下载而不会在浏览器上尝试打开...
- 利用GDI+ for.NET 给图片加水印标记
- 换工作,看机会的,戳进来!
- 老司机心得之时间管理入坑
- POI 模板生成word PDF——牛X神器
- Rounded Numbers
- Linux运维笔记-日常操作命令总结(1)
- Seaborn调色板设置
- 我来告诉你,那些博客中的gif动态图是怎么弄的?
- FLASK RESTFUL TOKEN用户验证笔记
- 求生之路2右下角显示服务器,求生之路2公网联机工具右下角刷不出服务器
- 1-丁基-3-甲基咪唑双三氟甲基磺酰亚胺([BMIm] NTf2)离子液体修饰Ni镍纳米颗粒的介绍
热门文章
- android 7.0关机动画,Android 修改系统关机动画的实现
- babylonjs 分部加载模型_基于babylon3D模型研究3D骨骼动画(1)
- OpencCV制作相框效果
- ebay 后台HTML有尺寸宽度要求吗,eBay产品尺码问题需要注意的事项
- Python “ValueError: incomplete format” upon print(“stuff %” % “thingy”) 解决方法
- SkeyeVSS智慧社区综合安防视频管理系统方案 助力小区安防建设智能化
- 视频编解码 — H264结构
- Rabbitmq消息中心_消息追踪
- 快速傅里叶和离散傅里叶的区别?
- pe系统如何读取手机_pe装系统,详细教您怎么在PE系统中重装系统