内存分配方式有三种:
) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的
整个运行期间都存在。例如全局变量, static 变量。
) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集
中,效率很高,但是分配的内存容量有限。
) 从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc new 申请任意
多少的内存,程序员自己负责在何时用 free delete 释放内存。动态内存的生存
期由我们决定,使用非常灵活,但问题也最多。

1.注意内存分配是否成功

内存分配未成功,却使用了它。
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,
在使用内存之前检查指针是否为 NULL。如果指针 p 是函数的参数,那么在函数的入口
处用 assert(p!=NULL)进行检查。如果是用 malloc 或 new 来申请内存,应该用 if(p==NULL)
或 if(p!=NULL)进行防错处理。

【规则 7-2-1】 用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL。
防止使用指针值为 NULL 的内存。
l 【规则 7-2-2】 不要忘记为数组和动态内存赋初值。 防止将未被初始化的内存作为右
值使用。
l 【规则 7-2-3】 避免数组或指针的下标越界,特别要当心发生“多 1”或者“少 1
操作。
l 【规则 7-2-4】 动态内存的申请与释放必须配对,防止内存泄漏。
l 【规则 7-2-5】 用 free delete 释放了内存之后,立即将指针设置为 NULL,防止
产生“野指针”

函数的 return 语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,
因为该内存在函数体结束时被自动销毁。

1)指针消亡了,并不表示它所指的内存会被自动释放。
( 2)内存被释放了, 并不表示指针会消亡或者成了 NULL 指针。

“野指针”的成因主要有两种:
1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为 NULL 指针,它
的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么
将指针设置为 NULL,要么让它指向合法的内存。

2)指针 p free 或者 delete 之后,没有置为 NULL,让人误以为 p 是个合法的指针。

随笔 高质量 C++/C 编程指南的更多相关文章

  1. 高质量C++/C编程指南(林锐)

    推荐-高质量C++/C编程指南(林锐) 版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐   2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐   20 ...

  2. 学习笔记之高质量C++/C编程指南

    高质量C++/C编程指南 http://man.lupaworld.com/content/develop/c&c++/c/c.htm 高质量C++/C编程指南(附录 C :C++/C 试题的 ...

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

    http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520634042 高质量C++/C编程指南 文件状态 [  ] 草稿文件 [√] 正式文 ...

  4. C内存管理相关内容--取自高质量C++&C编程指南

    1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数 ...

  5. 《高质量C++/C编程指南》陷阱 【转】

    作者:幻の上帝 出处:http://hi.baidu.com/frankhb1989/item/185f0a14823dd1f8dceeca2c 此文硬伤不少,且相对谭XX的书而言隐晦许多,不建议新手 ...

  6. 高质量C++C编程指南笔记 标签: c++笔记 2015-11-22 20:59 179人阅读 评论(0) 收藏

    1.  在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数. 2.  如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面 ...

  7. 《高质量C++&C 编程指南》学习笔记

    这本电子书是在国科大上课时候,老师在课件资源里边提供的.之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他.因此,我就格外注意这件事,但 ...

  8. 《高质量c++/c编程指南》学习摘要

    1. 尽可能在定义变量的同时初始化该变量(就近原则)——防止忘记初始化,引用未被初始化的变量,可能导致程序错误 2. 代码行最大长度宜控制在70~80个字符以内(长行拆分)——否则眼睛看不过来,也不便 ...

  9. 高质量c c++编程

    第1章 文件结构 每一个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.还有一个文件用于保存程序的实现(implementation),称为定义(de ...

随机推荐

  1. Windows下搭建Git开发环境

    Windows下搭建Git开发环境主要有以下三种方法: 1,VS,vs2013和vs2015中已经集成了git插件了 2,msysGit+TortoiseGit 3,msysGit+SourceTre ...

  2. DBAccess

    01.单SQL执行.DBA.ExeuteSQL(SQL语句,是否返回值,是否事务处理,返回值<字符型>):Boolean; -- 执行SQL后,将影响的行数进行返回 02.批量SQL执行. ...

  3. Winform开发框架之系统登录实现

    在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理多个用户账号,希望通过不同的账号登录进行管理不同的资料,另一种情况是酒店的换班操作,另一个人接替前面的人进行 ...

  4. app转让遇到的坑

    家人共享的一部分 首先我们要符合app转让的一些基本规定,填写正确的信息去申请转让.(google会有很多正确的转让步骤),这里我就不多写出来了. 当接收到接受app的时候会出现一些想不到的问题. 其 ...

  5. <input type="file">中怎设置那个按钮的样式

    最近才开始学习HTML,在练习表单的过程中,发现在使用<input type="file"/>这个类型的元素,产生的文件框和浏览按扭,它们的样式往往不符合我们的需要.怎 ...

  6. php大力力 [046节] 兄弟连高洛峰 PHP教程 2015年[最新最新最新最新最新]

    兄弟连高洛峰老师新版PHP视频教程列表[每日更新] http://bbs.lampbrother.net/read-htm-tid-160506.html HTML部分1.[2015]兄弟连高洛峰 H ...

  7. css3 倒影

    说起倒影效果,在传统网页中,我们只能使用photoshop进行事先将倒影设计好,然后导入到网页中,这样不但耗费资源,也阻碍了开发的效率.而 css3新增了Reflections板块,css  Refl ...

  8. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)

    A.暴力枚举,注意游戏最长为90分钟 B.暴力,c[l]++,c[r]--,记录中间有多长的段是大小为n的,注意特判m=0的情况 C.暴力枚举,我居然一开始没想出来!我一直以为每次都要统计最大的,就要 ...

  9. 原生javascript加载运行

    原生javascript加载运行 (function(){ //TODO sometings }()); 在要运行相应代码的位置加入script标签,创建函数并自执行; 关于window.onload ...

  10. 极简版 react+webpack 脚手架

    目录结构 asset/ css/ img/ src/ entry.js ------------------------ 入口文件 .babelrc index.html package.json w ...