VS2013 调试时的 0xCCCCCCCC 读取字符串的字符时出错_0vssaaa jlsxcccc-程序员宅基地

技术标签: C语言  数据结构及其算法  

0xcccccccc : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory
0xcdcdcdcd : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory
0xfeeefeee : Used by Microsoft's HeapFree() to mark freed heap memory
         对于0xcccccccc和0xcdcdcdcd,在 Debug 模式下,VC 会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当字符串看就是 “烫烫烫烫……”;会把未初始化的堆内存上的指针全部填成 0xcdcdcdcd,当字符串看就是 “屯屯屯屯……”。那么调试器为什么要这么做呢?VC的DEBUG版会把未初始化的指针自动初始化为0xcccccccc或0xcdcdcdcd,而不是就让取随机值,那是为了方便我们调试程序,如果野指针的初值不确定,那么每次调试同一个程序就可能出现不一样的结果,比如这次程序崩掉,下次却能正常运行,这样显然对我们解bug是非常不利的,所以自动初始化的目的是为了让我们一眼就能确定我们使用了未初始化的野指针了。
       对于0xfeeefeee,是用来标记堆上已经释放掉的内存。注意,如果指针指向的内存被释放了,变量变量本身的地址如未做改动,还是之前指向的内存的地址。如果该指针是一个类的指针,并且类中包含有指针变量,则内存被释放后(对于C++类,通常是执行delete操作),类中的指针变量就会被赋值为0xfeeefeee。如果早调试代码过程中,发现有值为0xfeeefeee的指针,就说明对应的内存被释放掉了,我们的代码已经出问题了。
      关于VC 中 debug和Release模式下的变量初始化问题大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc,而release的赋值近似于随机(我想是直接从内存中分配的,没有初始化过)。这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到,如debug方式下数组越界也大多不会出错,在 release中就暴露出来了,这个找起来就比较难了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41268108/article/details/82795223

智能推荐

使用QSerialPort内存不断增长以及原因剖析_qt程序内存只增不减-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏13次。从Qt源码的角度分析QSerialPort可能存在的内存不断增长的原因。_qt程序内存只增不减

Request body exceeded settings.DATA_UPLOAD_MAX_MEMORY_SIZE.-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏3次。完整的报错日志:ERROR 2019-09-24 09:27:23,160 scheme:https path:/asset/api/interface/ method:POST data:<QueryDict: {}>Traceback (most recent call last): File "/code/asset_apps/main/views/error_Trace..._request body exceeded settings.data_upload_max_memory_size.

Fiddler 抓包下载 M3U8 视频_fiddler抓包,拿m3u8,然后n_m3u8dl-cli拉回来-程序员宅基地

文章浏览阅读8.6k次,点赞7次,收藏40次。本文以下载钉钉的直播回放视频为例,介绍如何下载 M3U8 视频。_fiddler抓包,拿m3u8,然后n_m3u8dl-cli拉回来

TAO使用指南 -- 编译ACE和TAO_vs2013编写tao-程序员宅基地

文章浏览阅读5.7k次。使用的环境是: WinXP Professional + MSVC SP5TAO完全支持Win32API,(包括Windows NT, Windows 2000, Windows 95/98/ME)VC5.0和VC6.0均可编译。一. Win32+VC6.0下编译和安装ACE和TAO将网上下载的TAO软件包解压缩到某个目录,在该目录下会有ACE_wrappers目录。请按照以下步骤来执行:_vs2013编写tao

osg示例程序解析2---osganimationeasemotion_inoutexpomotion-程序员宅基地

文章浏览阅读1.1k次。本文参考文章http://blog.csdn.net/yungis/article/details/8463077#include #include #include #include #include #include #include #include #include #include #include #include class Eas_inoutexpomotion

input type=hidden-程序员宅基地

文章浏览阅读207次。在web开发过程中,对于在页面存储但并不需要显示出来的值,我们通常使用&lt;input type="hidden" value="看你啦" /&gt;来存储。但是此input 虽然不可见但是在IE6、IE7仍然会占位(IE8没有不会),虽然不是什么大问题,但是可能会导致整个页面出现无故的空白区,而影响页面布局。我的解决办法是:&lt;div style="height:0px;w..._"input type=\"hidden"

随便推点

损失函数——交叉熵损失函数_bp神经网络交叉熵loss曲线图-程序员宅基地

文章浏览阅读2.5k次。交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。一、二次代价函数的不足ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮:当运动员发现自己的投篮方向离正确方向越远,那么他调整的投篮角度就应该越大,篮球就更容易投进篮筐。同理,_bp神经网络交叉熵loss曲线图

Systemverilog中时间单位以及相关系统函数_systemverilog 时间函数-程序员宅基地

文章浏览阅读1.2w次,点赞4次,收藏26次。在Systemverilog中有一些与时间相关的系统函数在TB打印log的时候会使用到,在打印log时间的时候,如果与我们预期的不一致,可以在这方面找原因。下面列出相关的系统函数$time$stime$realtime`timescale$printtimescale$time: 返回module 64bit 整数时间单位,这里的时间单位做一下说明,比如 `timescale 10ns/1ns , 时间单位就是10ns`timescale 10ns/1nsmodule test;_systemverilog 时间函数

html5游戏加入计时器,html5倒计时插件制作圆形计时器代码-程序员宅基地

文章浏览阅读285次。特效描述:html5倒计时插件 圆形计时器代码。计时器代码结构1. 引入CSS2. 引入JS3. HTML代码jQuery计时器插件TimeCircles演示1演示1(默认+美化)演示2(带控制)离2014年1月1日还有(2014年1月1日已过)倒计时10秒后结束页面开始时计时$(function(){$('#someTimer1').TimeCircles({time : {Days: {sho..._html5 圆形倒计时

ECharts -堆叠柱状图_echart 堆叠柱状图-程序员宅基地

文章浏览阅读2.8k次。ECharts 教程 基础篇ECharts数据可视化实验室,解读适合使用场景官网项目简介:ECharts 是一款由百度前端技术部开发的,基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。涵盖各行业图表,满足各种需求。项目地址:https://gitee.com/echarts/echarts现在公司刚分配一个任务,需要用到 echarts堆叠柱状图处理缺陷报表问题,以前也没有接触过,所以一边学习ECharts官网上的中文API(http://_echart 堆叠柱状图

华为云计算FusionCompute环境部署实验之使用批量部署工具安装-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏17次。本文由乾颐堂HCIE培训讲师姜帆老师提供一.环境介绍使用实验环境必须提前在中登记预约1. 实验拓扑2. 环境简介使用环境安装虚拟机通过服务器的BMC接口实现,电源控制 访问Console 光驱挂载服务器管理IP为10.1.25.121所在VLAN25VRM登录IP地址为10.1.25.120所在VLAN25软件安装所使用的虚拟机通过VLAN27给服务器提供PXE引导能力二..._实验0 实验平台环境(华为云程序设计环境部署)

做一个带时分秒的extjs 日期控件扩展-程序员宅基地

文章浏览阅读268次。本地下载原文链接虽说不喜欢做这种做XX内部管理系统的生活,虽说不喜欢extjs,但是工作就是工作,找些乐趣也好。也感谢恶魔主管给我时间去了解,去修改一些很细节的体验方面的东西。唉,算了他又不看,不拍马屁了···extjs没有日期加时分秒的时间控件,然而我们用到了,所以需要自己去找。我们用了extjs5,但是大部分的这种控件都是停留在extjs4的,4和5相差很多,都不是很..._extjs 日期组件显示时分秒