内存管理
C语言中动态内存管理方式:malloc/calloc/realloc和free
void* malloc(unsigned size);
void* calloc(size_t numElements, size_t sizeOfElement);
void* realloc(void* ptr, unsigned newsize);
都在stdlib.h函数库内,它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL.
(1)函数malloc()
在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址.
(2)函数calloc()
与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,即在内存中申请numElements*sizeOfElement字节大小的连续地址空间.
(3)函数realloc()
给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度.
void Test()
{
//开辟一个整形的大小
int* p1 = (int *)malloc(sizeof(int));
free(p1);//释放p1
//开辟一个整形的大小并初始化为4
int* p2 = (int *)calloc(4, sizeof(int));
//对p2进行扩容操作
int* p3 = (int *)realloc(p2, sizeof(int)* 10);
free(p3);//释放p3
}
如上代码不需要对p2进行释放,因为p3对其增容的时候将p2的数据拷贝过去之后会将p2进行释放。realloc可以对一段空间进行缩容吗?答案是可以的,但是缩容之后,后面缩掉的空间如果有数据的话就会丢失,缩容不会重新开辟一块空间。
一、C++内存管理方式
通过 new 和 delete 操作符进行动态内存管理
void Test()
{
// 动态申请一个int类型的空间
int* ptr1