一.区别:
1.new 在 自由存储区域 开辟空间
malloc 堆上
2.new 返回类型安全
malloc 返回类型不安全(返回void *)
3.new 开辟时不需要计算内存开辟的大小
malloc 开辟时需要计算内存开辟的大小
4.new 失败抛出异常 (bad_alloc)
malloc 失败返回NULL
5.new 开辟内存的同时可以初始化
malloc 单纯开辟内存
二.new的使用
//开辟一个int类型的空间,初始化值为10
int* p = new int(10);
delete p;
//开辟一个int类型的长度为10的数组并初始化
int* cp = new int[10]();
delete[] cp;
//开辟二维数组malloc
int**parr = (int**)malloc(sizeof(int*) * 10);
for (int i = 0; i < 10; i++)
{
parr[i] = (int*)malloc(sizeof(int) * 10);
}
for (int i = 0; i < 10; i++)
{
free(parr[i]);
}
free(parr);
//开辟二维数组new
int** arr = new int*[10];
for (int i = 0; i < 10; i++)
{
arr[i] = new int[10];
}
for (int i = 0; i < 10; i++)
{
delete[] arr[i];
}
delete[] arr;