《高质量C编程指南》读书笔记

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

第七章 内存管理

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有