- new不仅可以做内存开辟,还可以做内存初始化操作。malloc只能做内存开辟,初始化需要另外的语句实现。
- malloc开辟内存失败,是通过返回值和nullptr作比较,而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断。
malloc开辟一块int类型大小的内存并赋值为20
int main(){
int *p = (int *) malloc(sizeof(int));
if(p==nullptr){
return -1; // 开辟失败
}
*p = 20;
free (p);
return 0;
}
new开辟一块int类型大小的内存并赋值为20
int main(){
try{
int *p1 = new int (20);
}
catch(const bad_alloc &e){
}
delete p1;
}
malloc开辟一块有20个整数的数组内存
int main(){
int *q = (int *) malloc(sizeof(int)*20);
if(q==nullptr){
return -1; // 开辟失败
}
free (q);
return 0;
}
new开辟一块有20个整数的数组内存,并赋初值0
int main(){
int *q1 = new int[20]();
delete []q1;
return 0;
}