一、申请内存:判断申请是否成功
申请内存时,要判断是否申请成功(一般申请大块内存时,应进行判断);
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; //本句会报错