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,来完成访问内存工作

0 0