C/C++内存管理一点问题
2005-10-18 14:46
330 查看
1.常见的内存错误及其对策
*内存未分配成功却使用了它:
在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查 ;如果使用malloc或者new来申请内存,应该用if(p==NULL)或if(p!=NULL)进防错处理。
*无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。
*内存分配成功并且已经初始化,但操作越过了内存的边界。
*内存泄露。动态内存的申请与释放必须配对,申请与释放的次数一定要想同。
*释放了内存却继续使用它(三种情况):
(1)对象调用关系过于复杂。应重新设计数据结构,解决对象管理混乱局面
(2)函数注意不要返回指向“栈内存”的“指针”或者“引用”,该内存在函数体结束时会被销毁
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
2.指针与数组的对比
*数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在声明周期内保持不变,只有数组的内容可以改变。
3.修改内容
企图修改常量字符串的内容导致运行错误。
4.内容复制与比较
对数组进行复制: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),那是比较地址
相关文章推荐
- 【新手入门】C++中的一点问题
- C++中删除头结点中的一点问题,希望大家帮帮忙
- C++中使用_asm汇编调用动态库函数的一点问题
- 关于ubuntu和VS中编译C++的一点问题
- c++字符串数组与字符串指针 c++ primer plus chapter 7 复习题8 的一点小问题
- Introduction to Programming with c++ 13-3 文件结束符的一点小问题
- C++中fstream头文件使用的一点小问题
- 关于C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- C语言内存管理机制的一点小问题
- [C++] log函数的一点小问题
- c/c++内存管理注意的问题
- C++ 内存管理的小问题--------危险的C++
- 二叉搜索树的实现及指针问题的一点思考(C++)
- C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- C++继承的一点细节问题
- C++中字符和字符串的一点问题
- iOS 内存管理的一点小问题
- 关于C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- c++中模版友元函数的一点小问题...无法访问private成员
- c++中使用vector可能会产生的内存管理问题