#include <iostream>
using namespace std;
int main() {
//----------------------------------------
int *p = (int *)malloc(sizeof(int));
if (p == nullptr) {
return -1;
}
*p = 20;
free(p);
//---------------------------------------
try{
int *q = new int(20);
}
catch(const bad_alloc &e){
}
delete q;
//--------------------------------------
// int *p1 = new int[20]; // 20个sizeof(int) 只负责开辟内存,不进行初始化
// int *p2 = new int[20] (); // 开辟内存+初始化为0
int *p3 = new int[20] (40);
delete [] p3;
return 0;
}
2.说明
malloc和free称为C的库函数
malloc按照byte分配内存,需要进行强制转换
malloc内存开辟失败是通过返回值和nullptr做比较
new和delete称为运算符
new除了能够进行内存开辟,还能够进行初始化操作
new开辟内存异常时通过抛出bad_alloc类型的异常来判断的
new有多少种?
int *p = new int (20); // 1.动态内存分配失败,返回bad_alloc异常
int *p1 = new (nothrow) int; // 2.动态内存分配失败,不抛出异常
const int *p2 = new const int (20) // 3.给常量执行动态内存分配,p2为指向常量的指针
// 定位new
int data = 0;
int *p4 = new (&data) int (50); // 4.在指定好的内存&data上,划分出一个四byte大小的内存,初始化为50