malloc和free是c语言的标准库函数,函数原型分别为
void * malloc(size_t size) 参数代表字节个数
void free(void * p) 参数代表内存地址
使用上:
- void func()
- {
- //开辟一个空间
- int* p1=(int*)malloc(sizeof(int));
- if(p1==NULL)
- {
- exit(1);
- }
- free(p1);
- //开辟多个空间
- int*p2=(int*)malloc(sizeof(int)*4);
- if(p2==NULL)
- {
- exit(1);
- }
- free(p2);
- }
- void func()
- {
- //开辟一个空间
- int* p1=new int(1);
- delete p1;
- //开辟多个空间
- int*p2=new int[4];
- delete []p2;
- }
(1)malloc开辟空间类型大小需手动计算,new是由编译器自己计算;
(2)malloc返回类型为void*,必须强制类型转换对应类型指针,new则直接返回对应类型指针;
(3)malloc开辟内存时返回内存地址要检查判空,因为若它可能开辟失败会返回NULL;new则不用判断,因为内存分配失败时,它会抛出异常bac_alloc,可以使用异常机制;
(4)无论释放几个空间大小,free只传递指针,多个对象时delete需加[]
(5)因为new/delete是操作符,它调用operator new / operator delete,它们可以被重载,在标准库里它有8个重载版本;而malloc/free不可以重载;
(6)对于malloc分配内存后,若在使用过程中内存分配不够或太多,这时可以使用realloc函数对其进行扩充或缩小,但是new分配好的内存不能这样被直观简单的改变