目录
malloc
calloc
realloc
在有分配的内存上再分配更大的内存空间
有两个分配方案:
①如果原有内存相邻的后面有未分配的内存,并足够用来分配,那么就按照地址顺序往后排
②如果原有内存相邻的后面没有未分配的内存,那么操作系统会向后面寻找可以足以分配空间的内存,并且将原有内存内的数据“剪切”到后面新分配的内存里面
int* ptr = (int*)malloc(4 * sizeof(int));
if (ptr == nullptr)
{
std::cout << "分配失败" << std::endl;
}
std::cout << sizeof(ptr) << std::endl;
ptr[0] = 9999;
ptr[1] = 12;
ptr[2] = 13;
ptr = (int*)realloc(ptr, 8 * sizeof(int));
if (ptr == nullptr)
{
std::cout << "分配失败" << std::endl;
}
for (int x = 0; x < 8; x++)
{
std::cout << ptr[x] << std::endl;
}
free
知识点:
alloc,和new的内存区域在堆区,分别使用free和delete释放
int的普通变量在栈上,系统会自动释放,无需手动释放
free(ptr);
ptr = 0;//free然后清零,是个好习惯
c++的内存分配,new
知识点二:
delete ptrD;//对应new int的释放内存方式
delete []ptrD;//对应new int[10]的释放内存方式
堆:内存不是连续的,如果不释放
栈:内存是连续的