VS2013 调试时读取字符串的字符时出错

VS2013 0xCCCCCCCCC 读取字符串的字符时出错 问题描述 相关知识点的补充: 问题描述 在一个函数调用中,使用二级指针作为函数参数,传递一个字符串指针数组,但是在访问的时候,却出现了运行时错误,具体表现为“0xCCCCCCCC 读取字符串的字符时出错”。 第一反应是字符串忘记初始化了,但是一检查不对,我初始化了啊。怎么会出现这种问题,然后通过单步调试发现是传值的二级指针指向的指针数组访问越界了,代码片段如下——... 阅读详情
  • 在 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中就暴露出来了,这个找起来就比较难了。
VS2013 C++项目集成JsonCpp:从编译配置到实战应用全解析 JSON作为一种轻量级数据交换格式,已成为现代软件开发中配置文件和网络数据传输的事实标准。其基于文本、易于阅读和编写的特性,使其在跨平台数据序列化场景中广泛应用。在C++项目中处理JSON数据,通常需要借助第三方库来实现解析与生成。JsonCpp作为一款成熟稳定的纯C++库,以其良好的兼容性和直观的API设计,成为许多历史项目或特定环境下的首选方案。在Visual Studio 2013这类较旧的开发环境中,集成第三方库常面临编译配置与运行时库匹配等工程实践挑战。本文以JsonCpp为例,详细阐述了在VS2 阅读详情

相关推荐

C++ primer 第五版 中文版 练习 12.24 个人code

C++ primer 第五版 中文版 练习 12.24  题目:编写一个程序,从标准输入读取一个字符串,存入一个动态分配的字符数组中。描述你的程序如何处理变长输入。测试你的程序, 输入一个超出你分配的数组长度的字符串。 答:处理变长lwt

jierandefeng的专栏 1088

VS中出现“读取字符串字符时出错”&“0Xcccccccc”&指针的初始化

示例程序: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char dest[] = "Hello A World"; char sour= 'A'; //定义字符变量,并初始化 char ch_temp; //定义字符变量 char *TEMP; /...

wuwuku123的博客 1万+

Windows C++开发中Unicode空格字符的检测与规范化处理

在计算机编程中,字符编码是文本处理的基础概念,它定义了字符与二进制数据之间的映射关系。Unicode作为国际标准,旨在统一所有字符的表示,但其包含的字符集远超出传统ASCII范围,这带来了编码一致性的挑战。从技术原理上看,不同编码方案(如UTF-8、UTF-16)对同一字符的字节表示可能完全不同,导致底层字节序列比较失效。这一问题的技术价值在于保障数据的逻辑正确性与系统鲁棒性,特别是在进行字符串比较、数据存储和哈希计算时。在应用场景上,多语言文本处理、网络数据抓取、文件解析以及第三方API数据交互都是典型的

341

VS2022 读取字符串时,无法读取内存

无法直接读取字符串错误如下所示需修改为以下所示解决问题。

m0_51523604的博客 1703

工作:三菱PLC与伺服之CC-Link IE Field Network通讯应用

CC-LINK-IE

好记性不如烂笔头 2万+

英飞凌 TC4X MCAL之SPI中断与DMA高效传输实战

本文详细介绍了英飞凌TC4X芯片的SPI通信实战,重点讲解如何通过MCAL配置SPI中断与DMA实现高效数据传输。针对汽车电子领域的高吞吐需求,提供了从基础配置到中断处理、DMA优化的完整解决方案,包含代码示例和调试技巧,帮助开发者提升系统性能与CPU利用率。

k0l1m2n3o的博客 876

VS读取文件显示:字符串中的字符无效

VS读取文件:字符串中的字符无效

lmj7926的博客 6103

离线安装PlutoSDR硬件支持包全攻略:没有MathWorks账号也能搞定MATLAB集成

本文详细介绍了在没有MathWorks账号和网络环境的情况下,如何离线安装PlutoSDR硬件支持包并实现MATLAB集成的完整解决方案。从驱动安装、设备识别到MATLAB支持包的离线部署,提供了全面的步骤指导和常见问题排查方法,特别适合高校实验室、军工单位等内网环境使用。

js777的博客 267

“读取字符串的字符时出错”“内存访问失败”,程序员未显式使用new导致对象调用malloc,分配内存后未调用构造函数初始化。

调试bug解决篇:“读取字符串的字符时出错”,“内存访问失败”,程序员未显式使用new导致对象调用malloc,分配内存后未调用构造函数初始化。 现象: 在函数里定义了一个对象,但调试时发现里面的string数据中的字符报“读取字符串的字符时出错”,里面的每一个字符的位置上都报“内存访问失败”的字样。(代码bug已修复,故无截图) 原因: 使用结构体变量类型定义一个结构体时,因为工程环境或者其他原因导致编译器对该变量只使用malloc分配内存,没有调用相应的构造函数对内部的数据初始化,比如重要的指针数据,和

ganfanren00001的博客 1万+

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 440

Windows平台MuJoCo仿真环境配置与Qt集成实战

本文详细介绍了在Windows平台上配置MuJoCo物理仿真环境并与Qt框架集成的完整实战流程。内容涵盖从环境准备、库文件配置、项目创建到核心代码编写的每一步,重点解决了Windows下常见的编译链接错误和路径问题,帮助开发者在Windows系统中高效搭建机器人仿真与可视化控制开发环境。

weixin_29221753的博客 172

(C++ 读取字符串时出错)自定义的类指针作为返回值

记录一个比较简单的异常以及解决办法。 这就是我遇见的一个异常。以下是源代码 #include<iostream> using namespace std; class A // 自定义的一个类 { public: A() { s = "A类"; i = 6; } void show() { cout << s<<endl...

lustyoung的博客 4183

关于使用perfetto(systrace)对卡顿进行分析-实战分析

本文主要讲述了我在使用perfetto分析小米中桌面滑动卡顿的方法以及步骤。 这是我用的trace文件: 链接:https://pan.baidu.com/s/11EhCvu0pfR7Qfu6bDf_GLw?pwd=ic43 提取码:ic43Perfetto 是用于性能检测和跟踪分析的生产级开源堆栈。它提供用于记录系统级和应用级跟踪、本机 + java 堆分析、使用 SQL 分析跟踪的库以及用于可视化和浏览多 GB 跟踪的基于 Web 的 UI 的服务和库。在地址栏输入https://ui.perfe

qq_40494059的博客 1万+

VS2013 调试时的 0xCCCCCCCC 读取字符串的字符时出错

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 0xfee...

qq_41268108的博客 3642

基于UC3842的反激电源的全面深入解析与MATLAB仿真

内置电流检测,可实现电流模式控制,提高系统的动态响应性。多种保护功能,如欠压锁定、过温保护、短路保护等,确保系统的安全可靠运行。宽工作电压范围,适应不同的电源设计需求。简单的外部元件配置,易于实现。UC3842的典型应用包括开关电源、DC-DC转换器和反激式电源等,其稳定性和可靠性在实际应用中得到了广泛验证。

qq_38334677的博客 1086

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VS2013 调试时的 0xCCCCCCCC 读取字符串的字符时出错

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 0xf

猫山王的专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c++调试出现“读取字符串的字符时出错”,无法读取内存? 以及malloc函数和new 的区别...

最近在学习编写编译器时用vs2013遇到一个问题: 使用的malloc函数新创立的结构体 中的string类型出现了问题,即读取字符串的字符时出错,无法读取内存 最后发现是新建节点时出现了错误:(C语言中没有string类 用malloc无法识别) TreeNode * t = (TreeNode *) malloc(sizeof(TreeNode)); (我copy书中的源码,用的c语...

weixin_30553065的博客 3857

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用VS2013与MATLAB混合编程

不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,...

蜕变之路的博客 1080

vs中没有fstream_包含fstream但“找不到ifstream”和“标识符未定义”

我不知道该怎么做 . 我编写了一个读取.obj文件的函数,与其他许多用于处理文本文件信息的示例函数不同 . 我已经包含了fstream,iostream和sstream . 它汇编 . 然而,当我运行它时,我得到:内存地址(ntdll.dll)的未处理异常,它抱怨访问冲突写入位置(我正在阅读,而不是写...) .我的变量监视“ifstream myfile”读取标识符“myfile”未定义“ . ...

weixin_39630762的博客 1257

VS2013 带命令行参数的调试问题 解决方案

int main(int argc,char* argv[]) argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数 比如:intmain(intargc,char*argv[]){inti;for(i=0;i<...

180

c语言基础day1

** 1. VS调试时查看内存 ** i 的值变为 7b(我们查看内存以 16 进制方式),其十进制值为 7*16+11=123。i 的值是 0x0000007b,为什么显示 效果为 7b 00 00 00 呢,是因为英特尔的 CPU 为小端存储,所以低位在前,高位在后。 scanf中遇见的问题 #include "stdio.h" #include "conio.h" using names...

FreshManInCoding的博客 370

分享几十年来记录下的编程技巧

技巧 VC下用TRACE(“。。%d”,j);可在调试窗口中显示变量值。 注意Sleep(1);和_sleep(1);的区别,前者是毫秒,后者是秒。_sleep(1)在VC下仍为毫秒,在UNIX下为秒,usleep(1)为微秒。 Regsvr32.exe位于windows\system32目录下,可用来注册OCX控件。然后在VB视图菜单中的对象浏览器里就可以看到里面各种方法的调用形式和返回值类型。 使用static可以使变量值不会因为函数退出而丢失。 Char file [16][18]

weixin_42383883的博客 399

我的cocos2d-x-3.2集成云风pbc lua binding方法

http://blog.k-res.net/archives/1741.html 我的cocos2d-x-3.2集成云风pbc lua binding方法 八月 19, 2014  |  Posted by K-Res   关于protobuf的cocos2d-x lua的集成,参考过网上的一些资料,考虑过用google官方实现,但感觉过于臃肿,且没有直接的lua接口,实际应用需

linking530的专栏 1078

C语言strtok_s函数

strtok_s 在C语言中的作用是分割出一个字符串中的单词 在MSDN上参数表: strtok_s strToken String containing token or tokens. strDelimit Set of delimiter characters. context Used to store position inform...

weixin_33713707的博客 876
上一篇: 从头到尾解析Hash 表算法
下一篇: 堆内存和栈内存详解
lemonaha
博客等级 码龄12年 41粉丝 61原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值