C++内存申请、内存释放
来源:互联网 发布:php sleep 停止执行 编辑:程序博客网 时间:2024/06/05 00:26
在初步学习C++时,遇到分配和释放。下面进行个人的最简短的总结
【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。
上述几条规则摘自前辈:http://blog.csdn.net/zhanghefu/article/details/5003407
1、内存申请。
个人理解,内存申请和定义一个数组的作用是类似的,都是用来存放一段数据,以便之后的访问。在内存申请的时候使用new操作。申请完之后要确保不是空,并且赋予初值。可以参照下述操作:
BYTE* pBuf = NULL;pBuf = new BYTE[LengthCount];if(pBuf != NULL){memset(pBuf,0,sizeof(BYTE)*LengthCount);}
这样就申请了一段内存,并且给定了初值。其中数据类型需要的长度需要注意。符合上述规则1、2
2、内存的释放
在使用完自己申请的内存后,需要释放内存。即使你是在局部函数中申请了内存,在使用结束之后依旧需要释放,因为申请的内存代表的是一段地址,具有全局效应。当然了,在程序结束的时候系统会自己清除的。
内存释放参考下述代码:
if (pBuf != NULL){delete []pBuf;pBuf = NULL;}
符合规则5。在释放时候需要注意一下情况:1、确保此时的pBuf的值与当时申请时候指向的地址是一致的,如不一致虽然在程序编译的时候没有错误,但是正常使用程序的时候会出现不可预知错误,并且很难定位bug 2、鉴于上述情况,在使用此段内存的时候,可以再定义一个临时的指针pTmp,来完成访问内存工作
- C内存申请释放
- C 内存申请和释放
- c++/c内存申请与释放
- C指针(一) - 申请和释放内存
- C指针(一) - 申请和释放内存
- c 内存申请释放函数小结
- 内存申请的释放
- 内存申请与释放
- 内存申请与释放
- 内存申请与释放
- C++内存申请、内存释放
- 内存资源的申请与释放(C&C++)
- MTK内存动态申请释放
- MTK内存动态申请释放
- 释放动态申请的内存
- MTK内存动态申请释放
- 申请和释放堆内存
- 动态申请和释放内存
- 各种最短路径算法的比较
- 《算法导论》笔记 第20章 20.2 可合并堆的操作
- Windows中Graphics API的发展
- git基础学习(三):版本回退 git reset --hard HEAD^(或者是commit id的前几位)和git reflog
- 新中国五代领导人漫画像亮相中国国际动漫节
- C++内存申请、内存释放
- mysql 函数
- 地理信息系统控件GIS控件TatukGIS Developer Kernel Toolkit功能详解及免费下载地址
- Java web Session 监听类。
- TRY NEW
- 通俗易懂的机器学习入门
- SpringMvc多视图整合配置教程(jsp、velocity、freemarker)
- 基类指针和派生类指针的使用总结
- solr-1.4.1 环境配置