C++动态内存管理
malloc/calloc/realloc/free
1、malloc调用形式为(类型*)malloc(size)。在内存的动态存储区中分配长度为“size”
字节的连续区域,返回该区域的首地址,此时内存中的值没有初始化,是一个随机值。2、calloc 调用形式为(类型*)calloc(n,size)。在内存的动态存储区中分配n块
长度为“size”字节的连续区域,返回首地址,此时内存中的值都被初始化为0。
3、realloc 调用形式为(类型*)realloc(*ptr,size)。将ptr内存大小增大到“size”,新
增加的内存块没有被初始化。
4、free 调用形式为free(void *ptr)。释放ptr所指的内存空间。
C++通过new和delete动态管理内存
new/delete动态管理对象
new[]/delete[]动态管理对象数组
void Test()
{
int* p4 = new int;//动态分配4个字节(1个int)的空间单个数据
int* p5 = new int(3);//动态分配4个字节(1个int)的空间并初始化为3
int* p6 = new int[3];//动态分配12个字节(3个int)的空间.
delete p4;
delete p5;
delete p6;
}
注意:malloc/free,new/delete,new[]/delete[] 一定匹配使用,否则会出现内存泄漏甚至崩溃的问题。
malloc/free和new/delete的区别和联系
1.他们是动态管理内存的入口。
2.malloc/free是c/c++标准库的函数,new/delete是c++操作符。
3.malloc/free只是动态分配内存空间,而new/delete除了分配空间还会构造函数和析构函数进行初始化和清理(清理成员)。
4.malloc/free需要手动计算内存大小且返回值会void*,new/delete可自己计算类型的大小,返回对应类型的指针。