//使用new操作符在堆中分配内存
int* p1 = new int;
*p1 = 2234;
qDebug() << "数字是:" << *p1;
//使用delete操作符在堆中释放内存
delete p1;

//在分配内存的时初始化
int* p2 = new int(100);
qDebug() << "数字是:" << *p2;
delete p2;

//给数组分配内存
int* p3 = new int[4]{ 1,2,4,6 };
//以数组方式new的也要以数组方式delete
qDebug() << "数字是:" << p3[0] << p3[1] << p3[2] << p3[3];
delete[]p3;

//通过new操作符分配N维数组,返回N-1维数组指针
//二维数组 三行四列
int(*p34)[4] = new int[3][4]{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
for (int i = 0; i < 3; i++)
{
for (int n = 0; n < 4; n++)
{
qDebug() << "数字是:" << p34[i][n];
}
}
//释放多维数组
delete[] p34;

//内存定位分配
short buf[8];
//在一个已分配的内存空间中创建对象
int* p6 = new (buf) int(0x12345678);
qDebug() << "p6数字是:" << *p6;
qDebug() << "buf数字是:" << buf[0] << buf[1] ;

-内存分配失败,new操作符抛出bad_alloc异常
//内存分配失败,new操作符抛出bad_alloc异常
try
{
int* p5 = new int[0xFFFFFFFFF];
}
catch (exception& e)
{
qDebug() << "内存分配失败";
}
//在分配内存的时初始化
int* p2 = new int(100);
qDebug() << "数字是:" << *p2;
delete p2;
//不能通过delete操作符释放已释放过的内存
//delete p2;
// 动态分配内存
int* ptr = new int(42);
// 使用指针
std::cout << "The value is: " << *ptr << std::endl;
// 删除指针
delete ptr;
//如果仍然指向已经被释放的内存,此时ptr就是一个野指针
ptr = nullptr; // 将指针设置为nullptr,避免成为野指针
// 尝试再次删除指针(现在是安全的,因为ptr是nullptr)
delete ptr; // 不会有任何副作用