“雷区”——内存管理
来源:互联网 发布:1hhh域名升级访问升级 编辑:程序博客网 时间:2024/05/16 08:31
3种内存分配形式:
(1)从静态存储区分配。内存在程序编译的时候就已经分配好了(已经编地址),这些内存在程序的整个运行期间都存在。
(2)在堆栈上分配。函数执行期间,函数内局部变量(包括形参)的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放(堆栈清退)。
(3)从堆(heap)或自由存储空间上分配,亦称动态内存分配。程序在运行期间用malloc()或new申请任意数量的内存,程序员自己掌握内存的释放时机(free()或delete).
原则:如果使用堆栈存储和静态存储能够满足应用要求,就不要使用动态存储。
常见内存错误:
(1)内存分配未成功,却使用了它;(补习操作系统内存管理模块知识)
解决办法:在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处使用assert(p!=NULL)进行检查以避免输入非法参数。如果使用malloc()或new来申请内存,应该用if(p==NULL)、if(p!=NULL)或者捕获异常来进行错误处理。
(2)内存分配成功,但没有初始化。
解决办法:赋初值
(3)内存分配成功并初始化,但操作越过内存的边界。
(4)忘记了释放内存或者只释放了部分内存,造成内存泄漏。
解决办法:保证动态内存的申请和释放必须配对。
(5)释放了内存却还在使用它,以下几种情况:
@程序中的对象调用关系过于复杂,难以搞清楚某个对象是否已经被释放,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面;
@函数的return语句写错,注意不能返回指向“栈内存”的指针或者引用,因为该内存在函数结束时被自动释放;
@使用free()或delete释放内存后,没有将指针设置为NULL,产生“野指针”;
@多次释放同一块内存。
- “雷区”——内存管理
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C中的雷区——C 内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解
- 踏入C++中的雷区——C++内存管理详解(I)
- 踏入C++中的雷区——C++内存管理详解(II)
- 年度总结
- BZOJ 1609
- 插入排序C语言代码
- DIY:magento 自动用户信息管理
- UVa 11489
- “雷区”——内存管理
- 冒泡排序C语言代码
- poj 3211 Washing Clothes 01背包问题
- BZOJ 1699
- x264编码(颜色空间已经用多媒体指令优化)效率测试结果
- CentOS-6.4-minimal版中配置网络防火墙和用户组等
- Windows运行命令大全
- CCClippingNode 在IOS设备和某些安卓设备上无效果
- 配置文件