一:malloc/free(函数)
malloc(memory allocation),意为动态内存分配,,从堆中分配和释放内存。
一般形式:
void *malloc(int numbytes);
void free(void *ptr);
案例一:
int *p = NULL;p = (int*)malloc(10 * sizeof(int));if (p){
*p = 10;//只用到了分配40个字节当中的前4个cout << *p << endl;free(p); //记得释放内存}
案例二:
int *p = NULL;int *q = NULL;p = (int*)malloc(10 * sizeof(int));q = p;if (p){
*q++ = 10;//在当前位置上赋值,然后指针移动*q++ = 20;//在当前位置上赋值,然后指针移动cout << *p << endl;cout << *(p+1) << endl;free(p); }
二:new/delete(运算符)
使用方式:
指针变量名 = new 类型标识符;
指针变量名 = new 类型标识符(初始值);
指针变量名 = new 类型标识符[内存单元个数];
案例一:
int *p = new int; if (p != NULL) //new失败可能直接报异常,而不是返回NULL{
*p = 20;cout << *p << endl;delete p;}
案例二:
int *p = new int(2); if (p != NULL) //new失败可能直接报异常,而不是返回NULL{
cout << *p << endl; //2*p = 20;cout << *p << endl; //20delete p;}
案例三:
int *p = new int[100]; //申请100*4个字节if (p != NULL) //new失败可能直接报异常,而不是返回NULL{
int *a = p; //a指向p所申请内存的首地址*a++ = 3;*a++ = 6;cout << *p << endl; //3cout << *(p+1)<< endl; //6delete[] p; //释放内存,不用写成delete[100] p;}
注意:
(1)malloc/free与new/delete必须配套使用
(2)不可多次使用delete来释放同一块内存,因为这个时候,已经不是把属于自己的内存空间进行释放了,有可能会出现程序异常。