C++内存的申请和使用注意事项

一、申请内存:判断申请是否成功

申请内存时,要判断是否申请成功(一般申请大块内存时,应进行判断);

1. VC++6.0编译器中当new分配内存失败时会返回空指针

//VC++6.0中当new分配内存失败时会返回空指针

unsigned char* pFrameBuffer=new (std::nothrow) unsigned char[1024*1024];
if(pFrameBuffer==NULL)
{
printf("decoder:Failed to new frameBuffer!\n");
return -1;
}

2. gcc的编译器对于C++标准支持比较好,所以当new分配内存失败时会抛出异常

//gcc的编译器对于C++标准支持比较好,所以当new分配内存失败时会抛出异常

try{

unsigned char* pFrameBuffer=new unsigned char[1024*1024];

}catch{

printf("decoder:Failed to new frameBuffer!\n");//内存申请失败会返回NULL
return -1;
}

二、使用内存:判断内存大小是否充足

1.判断要存储的内存大小是否小于内存大小;

2.如果不小于,则进行拷贝存储;

3.如果小于,则将之前申请的内存进行释放,重新申请更大的内存,直到满足要存储的内存大小;

int iNewSize=1024;
unsigned char* pFrameBuffer=new unsigned char[iNewSize];
//内存不够,释放掉重新申请
while(iNeedSize > iNewSize)
{
   //释放旧buffer
   if(pFrameBuffer!=NULL)
   {
      delete []pFrameBuffer;
   }
   //申请更大的新buffer
   iNewSize=iNewSize*1.5;
   unsigned char* pFrameBuffer=new unsigned char[iNewSize];
}
//拷贝赋值
memcpy(distBuffer,srcBuffer,iNeedSize);

三、使用结束:进行释放

1.char *psrc = src;(在使用src之前,先定义一个指向src的指针,程序运行期间,使用psrc指针。防止src所指位置改变,将导致delete时出错)

2.new申请使用delete释放;new[]申请使用 []delete释放。

int *p = new int; //分配1个int型的内存空间
delete p; //释放内存

int *p = new int[10]; //分配10个int型的内存空间
delete[] p;

3.已经释放的内存,再次释放会报错

int* p = new int;
*p = 5;
delete p;
delete p; //本句会报错

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值