高质量C++/C编程指南 -- 第7章 内存管理 P2

关于《高质量C++/C编程指南》 这本书是林锐博士写于2001年7月,现在都2012年了,相隔10年多, 用了两天时间看完这个100页的书,里面几乎没有废话,全是精炼的总结性的东西, 思路顺畅,语言流畅,看起来不费劲。 一共11章,其中1-6章的内容,和我自己的习惯是一致的,看此书之前已经是我的习惯了, 看了之后更加印证了正确性。 第7章,内存管理,我认为这一章是正本书中最精华的部分,是给我帮助最大的一部分。 8-11章对我的启发介于前两者之间。 以下是我觉得比较重要,或者说容易忘记的几条(因为可能不常用),列出来以备以后查阅, 阅读详情

http://www.bccn.net/Article/kfyy/cjj/jc/200512/2634_2.html

 

7.3.1 修改内容

示例7-3-1中,字符数组a的容量是6个字符,其内容为hello\0。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。

char a[] = “hello”;

a[0] = ‘X’;

cout << a << endl;

char *p = “world”; // 注意p指向常量字符串

p[0] = ‘X’; // 编译器不能发现该错误

cout << p << endl;

示例7-3-1 修改数组和指针的内容

7.3.2 内容复制与比较

不能对数组名进行直接复制与比较。示例7-3-2中,若想把数组a的内容复制给数组b,不能用语句 b = a ,否则将产生编译错误。应该用标准库函数strcpy进行复制。同理,比较b和a的内容是否相同,不能用if(b==a) 来判断,应该用标准库函数strcmp进行比较。

语句p = a 并不能把a的内容复制指针p,而是把a的地址赋给了p。要想复制a的内容,可以先用库函数malloc为p申请一块容量为strlen(a)+1个字符的内存,再用strcpy进行字符串复制。同理,语句if(p==a) 比较的不是内容而是地址,应该用库函数strcmp来比较。

// 数组…

char a[] = "hello";

char b[10];

strcpy(b, a); // 不能用 b = a;

if(strcmp(b, a) == 0) // 不能用 if (b == a)

…

// 指针…

int len = strlen(a);

char *p = (char *)malloc(sizeof(char)*(len+1));

strcpy(p,a); // 不要用 p = a;

if(strcmp(p, a) == 0) // 不要用 if (p == a)

…

示例7-3-2 数组和指针的内容复制与比较

 

《高质量C编程指南》读后感 今天看《高质量C编程指南》最大的体会是一个书名:细节决定成败1、以前写代码心态不对:为了图省事或者为了尽快实现所需要的功能,尽管知道某些做法存在隐患,但还是忽略了它,今后在编程中要戒除急功近利的思想2、以前缺乏写高质量代码的意识:以前编写代码以实现的具体功能为目的,考虑代码质量问题甚少3、以前调试程序只是知道最基本的debug查看内存变化是否是自己预期值的方法,只能说是略知皮毛,没有掌 阅读详情

相关推荐

《高质量C/C++编程指南》学习笔记

这本书只有短短100页,可是却可以称得上是脍炙人口。一年前初读此书时就感觉受益良多,而今再次重读,仍然不肯停顿一口气读完。针对书中指出的一些编程规则和建议,摘录下个人认为比较好的部分。 第1章 文件结构 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。 用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用 #incl

Hao_09的专栏 2296

高质量C++/C编程指南[7]

 第7章 内存管理              欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需

天高路远 542

使用Eggjs做服务端获取微信小程序云开发数据库的access_token

最近自己想写了一个微信小程序,恰巧里面有个云开发,恰巧里面有个数据库,那懒人的我,就直接用云开发里面的数据库了,做测试或者正式也好,对于刚开始来说,免费的配额是够用的。 后来想到在小程序云开发上面的数据怎么看才方便?刚好微信小程序有一个服务端API,那就方便很多了,那就直接敲个服务端来获取云开发上数据库的数据出来到自己的后台上面,那以后管理起来也方便很多。 看了一下服务端api之后,发现有三个重要...

kalenE992的博客 1705

高质量C++/C编程指南 -- 第7章 内存管理 P7

http://www.bccn.net/Article/kfyy/cjj/jc/200512/2634_7.html   7.11 new/delete 的使用要点 运算符new使用起来要比函数malloc简单得多,例如: int *p1 = (int *)malloc(sizeof(int) * length); int *p2 = new int[length]; 这是因为new内

-----------------------------不要在跟自己无关的事情上浪费时间 602

JAVA审批流程,一个简单表结构设计方案By OU

一、表结构设计1.流程表(process)用于存储审批流程的基本信息。字段名类型描述idBIGINT主键,流程IDname流程名称TEXT流程描述DATETIME创建时间DATETIME更新时间statusTINYINT(1)流程状态(0: 停用, 1: 启用)2.节点表(process_node)用于管理流程中的每个审批节点。字段名类型描述idBIGINT主键,节点IDprocess_idBIGINT流程ID,外键关联process.id。

1901

更新3ds时和用读卡器读取传输文件操作不当导致的tf卡损坏无法读取需要格式化时出现的问题以及不想丢失文件并且修复的详细解决方法

前言: 不小心按了同意更新而且tf/sd卡损坏导致了3ds打开后都是出现 Anerror has occurred:(红色的) Failed to apply 1 FIRM patch(es). Press any button to shotdown 这样的画面,按了任意键后就关机,我找了很多资料和大佬的回答解决了这些问题,现在记录一下。 一.不小心按了更新导致上述的画面 原因:是因为系统升级了,但是里面的Luma3DS还没有更新,属于是更新了但没有完全更新的状态。 **修复方法** 1.首先请按

give_me_fish的博客 1万+

P2C项目正式开启!!!

众所周知C++C++C++和PascalPascalPascal是OIerOIerOIer常用的两种语言。但由于语法不同,很多P党都不愿意转C++C++C++。因此本人在此启动一个项目:P2CP2CP2C1项目。 项目名称: P2CP2CP2C 项目编号: 001001001 项目等级: the&amp;amp;amp;amp;amp;nbsp;most&amp;amp;amp;amp;amp;nbsp;importantthe\ most\ importantthe&amp;amp

无 1872

Android 编译系统(Build System)剖析

make是一种自动化构建工具,通过读取Makefile将源代码自动编译为可执行程序和库文件。

虎哥LoveDroid 2169

高质量C++/C编程指南

SEPG google 2 4 2001-07-18T11:49:00Z 2003-03-18T18:27:00Z 2003-03-18T18:27:00Z 79 10873 61977 SBell 516 123 76112 9.2812

romandion的专栏 2196

让 ABAP 开发者也能做出高质量 SAP Fiori:到底需要掌握多少前端知识?

文章摘要: 随着SAP技术演进,ABAP开发者的角色边界正在重构。传统SAP GUI时代的全栈开发模式逐渐转向RAP+Fiori Elements的新范式,其中关键技术变化包括: 开发模式转变:从前后端耦合转向RAP模型驱动开发,通过CDS注解实现UI意图表达 分工优化:Fiori Elements模板处理80%标准UI需求,Flexible Programming Model解决20%差异化需求 效率提升:注解驱动开发可在RAP建模阶段同步定义UI结构,大幅缩短交付周期 工具整合:SAP提供从建模到部署的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 350

Open-Sora代码详细解读(2):时空3D VAE

目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。

沉迷单车的追风少年 2053

读书笔记-高质量C++/C编程指南-第7章 内存管理

  【序】最近痛下决心要好好学习下C和C++,以为即将来临的求职做点准备,在网上搜野指针的问题时看到了《高质量C++/C编程指南》,对于我这种想从事嵌入式开发的人来说,犹如收获到一本编程的bible似的。此文对C和C++编程的风格及注意事项进行了精妙的分析,集合了Thinking in C++、Effective C++等经典书籍的主要内容,实乃至宝啊本人对此文进行了研读,红色部分是我

Sailor_forever 1580

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2601

高质量C++/C编程指南 -- 第7章 内存管理 (1)

高质量C++/C编程指南 -- 第7章 内存管理 (1)程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式内存分配方式有三种:(1)       从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内

tattarrattat的专栏 1068

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

高质量C++/C编程指南 -- 第7章 内存管理 (2)

高质量C++/C编程指南 -- 第7章 内存管理 (2)7.7 杜绝“野指针”“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。“野指针”的成因主要有两种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气

tattarrattat的专栏 964

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++内存管理 && 读高质量C++/C编程指南第7章

C++中的内存管理是很值得学习一下,非常容易出错

weixin_43164548的博客 1814

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

高质量C++/C编程指南 -- 第7章 内存管理

第7章 内存管理欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办

gzblog的专栏 617

高质量C++/C编程指南(七)内存管理

一、内存的分配方式 二、常见的内存错误及其对策 三、指针参数是如何传递内存的? 1、如果非得要用指针参数去申请内存,那么应该用“指向指针的指针”。 2、用函数返回值来传递动态内存 四、free和delete把指针怎么啦? 五、动态内存会被自动释放吗? 六、杜绝“野指针' 七、内存耗尽怎么办? 八、malloc/free的使用要点 1、malloc 2、free 九、new/delete的使用要点 1、new 2、delete 十、一些心得体会

Exp.Joker 750

高质量c++/c编程指南—内存管理篇

以下是阿鲤对高质量c++/c编程指南的读书笔记及自己的理解,分享出来希望对大家有用。这里是第七章的内容: 1:内存的分配方式。 2:常见的内存错误及其对策。 3:指针与数组的对比。 4:指针参数是如何传递内存的? 5:free和delete把指针怎么啦? 6:动态内存会自带释放吗? 7:杜绝“野指针” 8:有了malloc/free为什么还要new/delete 9:内存耗尽怎么...

belongHWL的博客 332

高质量C++/C编程指南 -- 第7章 内存管理 P5

http://www.bccn.net/Article/kfyy/cjj/jc/200512/2634_5.html   7.9 内存耗尽怎么办? 如果在申请动态内存时找不到足够大的内存块,malloc和new将返回NULL指针,宣告内存申请失败。通常有三种方式处理“内存耗尽”问题。 (1)判断指针是否为NULL,如果是则马上用return语句终止本函数。例如: void Func(vo

-----------------------------不要在跟自己无关的事情上浪费时间 1168

林锐C语言--高质量C/C++编程(第七章内存管理)

这是因为指针p的类型以及它的内存的容量事先都是知道的,语句free(p)能正确地释放内存。在malloc的"()"中使用sizeof运算符是良好的风格,但要当心有时我们会昏了头,写出 p = malloc(sizeof §)这样的程序来。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来高质量 C++/C 编程指南,操作动态内存。别看 free 和 delete 的名字恶狠狠的(尤其是 delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。

千月星跡 1245
上一篇: 高质量C++/C编程指南 -- 第7章 内存管理 P1
下一篇: 高质量C++/C编程指南 -- 第7章 内存管理 P3
sergery
博客等级 码龄18年 113粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值