中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
《高质量C编程指南》读书笔记
作者:未知 时间:2005-07-27 23:31 出处:CSDN 责编:chinaitpower
              摘要:《高质量C编程指南》读书笔记

第七章 内存管理

7.2常见的内存错误及其对策

      *内存未分配成功却使用了它:

              在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查 ;如果使用malloc或者new来申请内存,应该用if(p==NULL)或if(p!=NULL)进防错处理。

     *无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。

     *内存分配成并且已经初始化,但操作越过了内存的边界。

     *内存泄露。动态内存的申请与释放必须配对,申请与释放的次数一定要想同。

     *释放了内存却继续使用它(三种情况):

               (1)对象调用关系过于复杂。应重新设计数据结构,解决对象管理混乱局面

               (2)函数注意不要返回指向“栈内存”的“指针”或者“引用”,该内存在函数体结束时会被销毁

               (3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。  

7.3指针与数组的对比

     *数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在声明周期内保持不变,只有数组的内容可以改变。

7.3.1修改内容

      企图修改常量字符串的内容导致运行错误。

7.3.2内容复制与比较

      对数组进行复制:strcpy();

     对数组进行比较:strcmp();

     //指针

      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.3计算内存容量


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有