cpp_heap_op - ShenYj/ShenYj.github.io GitHub Wiki
在堆空间申请内存,返回空间的首地址
int *p = (int *)malloc(4);
*p = 10;
回收内存, 释放堆空间内存, 申请时多少,就释放多少
int *p = (int *)malloc(4);
free(p);
除了malloc的方式外,c++ 还提供了一个种方式来申请堆空间内存
/// 申请一个int 类型大小的空间内存
int *p = new int;
*p = 10;
相对比 malloc, 也不需要指定类型了
释放内存, 配合 new 使用
int *p = new int;
delete p;
malloc 配合 free 使用, new 配合 delete 使用, 不能随意配对使用
注意点:
char *p = new char[4];
/// 一定要带中括号,否则无法完全销毁
delete p[];
堆空间连续内存空间初始化,也可以用于清零、重置数据
char *p = new char[4];
/// 此时使用 *p = 1 无法无完全初始化申请的堆空间内存,因为char只有1个字节,这样只能初始化首地址的一个字节
/// 参数1: 内存地址
/// 参数2: 初始化的值
/// 参数3: 初始化多少字节
memset(p, 0, sizeof(char[4]));
int *p1 = new int; /// 未被初始化
int *p2 = new int(); /// 被初始化为0
int *p3 = new int(5); /// 被初始化为5
int *p4 = new int[3]; /// 数组元素未被初始化
int *p5 = new int[3](); /// 3个数组元素都被初始化为0
int *p6 = new int[3]{}; /// 3个数组元素都被初始化为0
int *p7 = new int[3]{ 5 }; /// 数组首元素被初始化为5,其他元素被初始化为0
通过汇编代码可以了解,自动调用了 memset 进行了初始化
是否初始化也取决于环境(平台)