malloc free
malloc是c语言中动态开辟内存时常用的函数,malloc只能单纯地开辟内存,使用malloc后,还需要在使用完之后用free释放掉其所开辟的空间。其函数原型如下:
void* malloc(size_t size);//void* 指向的是一个半开半闭的区间,即[ ),因此不安全
C和C++中允许任意类型的指针转成void* ,而若想将void* 转成别的类型的指针需要强转。
new delete
C++中动态开辟内存使用new关键字,而释放内存使用delete关键字。new不仅能开辟内存,而且还能够做初始化,例如:
int* p=new int(10);//类型+初始化列表
delete p;
int* p=new int[10];//开辟数组p[10]
delete[] p;
int* p=new int[10]();//只能进行零初始化
const int* p=new const int(20);//开辟常量内存
//重定位new
int a;
char* c=new(&a)char('a');//通过new后面的地址所对应的内存单元,拿到内存供外部使用
new和malloc的区别
1.new是关键字,malloc是一个函数;
2.new不需要确定开辟的大小,malloc需要传递开辟的大小;
3.new返回值类型安全,malloc返回值类型不安全;
4.new还可以做初始化,malloc只能开辟内存;
5.new是以 new[ ]的形式开辟数组,而malloc开辟数组以开辟总大小的方式处理;
6.new开辟内存失败,直接抛出异常,而malloc开辟失败返回NULL;
7.new开辟的内存位置是自由存储区域,malloc在堆上开辟;