在 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

警惕数组越界

避免野指针

烫烫烫屯屯屯 那些事相关推荐

  1. 手持两把锟斤拷,口中疾呼烫烫烫。 脚踏千朵屯屯屯,笑看万物锘锘锘。

    锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACT ...

  2. 手持两把锟斤拷, 口中疾呼烫烫烫, 脚踏千朵屯屯屯, 笑看万物锘锘锘

    锟斤拷的来历 GBK与UTF-8 Unicode和老编码体系的转化进程中,一定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLAC ...

  3. 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘

    锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACT ...

  4. 你的C++为什么‘烫‘了,又为什么‘屯‘了?

    你是不是有过这样的经历?写C/C++的时候,出现这种奇怪的字符串,比如出现如下字符 然后还出现这种字符串 你回头一看,最终发现了问题,肯定是下面这两种问题. 出现'烫'的时候,是你声明了一个char数 ...

  5. 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。

    233333 TA 学编程时爱看的书籍封面是? 各种各样的动物 21 天精通 XXX 現役女子大生(秘)リアルセックス 03 转载于:https://www.cnblogs.com/guangshan ...

  6. 移动硬盘运行linux很烫,硬盘烫手正常吗

    硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成.碟片外覆盖有铁磁性材料.下面是小编带来的关于硬盘烫手正常吗的内容,欢迎阅读! 硬盘烫手正常吗: 主要是因为硬盘的运行其实是在告诉旋 ...

  7. 烫烫烫和屯屯屯2021

    malloc屯屯屯 #include <stdio.h> #include <stdlib.h>int main(int argc, char **argv) {void *p ...

  8. 烫烫烫、屯屯屯、锟斤拷、诺诺诺的简单示例代码

    手持两把锟斤拷, 口中疾呼烫烫烫. 脚踏千朵屯屯屯, 笑看万物锘锘锘. 烫烫烫 简单点说,最常见的就是 数组没初始化 并且按照%s 输出了. #include<stdio.h> int m ...

  9. 不识烫烫烫屯屯屯,还说是攻城狮?

    作为一名码农,想必都知道Hello World,什么,你竟然不知道?哦,那你可能不是码农,抬走,下一个. 言归正传,在码农界,存在一首打油诗,我带大家一道欣赏. 手持两把锟斤拷, 口中疾呼烫烫烫. 脚 ...

最新文章

  1. Docker(十):Docker实战 Docker 安装 Nginx
  2. 使用缓存防击穿,解决微信”被动回复用户消息”重试回复问题
  3. edusoho linux 500错误,EduSoho网校系统如何处理500 Internal Server Error? - EduSoho官网
  4. 【Codeforces - 769D】k-Interesting Pairs Of Integers(暴力,统计,思维,数学,异或)
  5. java容器相关问题
  6. hp-ux ftp启动_您可以做12项免费的事情来快速启动UX设计事业
  7. imac java7下载地址,如何在苹果电脑上安装JAVA开发工具,经验告诉你该这样
  8. 捡起JavaScript(3)
  9. 很实用的小功能,通过配置Web.xml让点击文件路径的超链接,直接下载而不会在浏览器上尝试打开...
  10. 利用GDI+ for.NET 给图片加水印标记
  11. 换工作,看机会的,戳进来!
  12. 老司机心得之时间管理入坑
  13. POI 模板生成word PDF——牛X神器
  14. Rounded Numbers
  15. Linux运维笔记-日常操作命令总结(1)
  16. Seaborn调色板设置
  17. 我来告诉你,那些博客中的gif动态图是怎么弄的?
  18. FLASK RESTFUL TOKEN用户验证笔记
  19. 求生之路2右下角显示服务器,求生之路2公网联机工具右下角刷不出服务器
  20. 1-丁基-3-甲基咪唑双三氟甲基磺酰亚胺([BMIm] NTf2)离子液体修饰Ni镍纳米颗粒的介绍

热门文章

  1. android 7.0关机动画,Android 修改系统关机动画的实现
  2. babylonjs 分部加载模型_基于babylon3D模型研究3D骨骼动画(1)
  3. OpencCV制作相框效果
  4. ebay 后台HTML有尺寸宽度要求吗,eBay产品尺码问题需要注意的事项
  5. Python “ValueError: incomplete format” upon print(“stuff %” % “thingy”) 解决方法
  6. SkeyeVSS智慧社区综合安防视频管理系统方案 助力小区安防建设智能化
  7. 视频编解码 — H264结构
  8. Rabbitmq消息中心_消息追踪
  9. 快速傅里叶和离散傅里叶的区别?
  10. pe系统如何读取手机_pe装系统,详细教您怎么在PE系统中重装系统