目录
calloc函数的功能
学习并使用calloc函数编辑
realloc函数的功能
学习并使用realloc函数编辑
calloc函数的功能
calloc函数的功能和malloc函数的功能类似,于malloc函数的区别只在于calloc函数会再返回地址之前把申请的空间的每个字节初始化为全0
C语言 ——— 学习并使用malloc和free函数-CSDN博客
学习并使用calloc函数
函数的参数:
size_t num:要动态开辟的空间的元素个数
size_t size:每个元素个数的大小,单位是字节
函数的返回值:
void*:和malloc函数一样,具体再使用的时候是使用者自己强制类型转换
代码演示:
// 动态开辟10个整型变量
int* parr = (int*)calloc(10, sizeof(int));
// 判断是否开辟成功
if (parr == NULL)
{
perror("calloc");
return -1;
}
// 验证释放初始化为0
for (int i = 0; i < 10; i++)
{
printf("%d ", *(parr + i));
}
代码验证:
realloc函数的功能
realloc函数的出现使得动态内存管理更加灵活,有时候申请的空间过大或过小时,就可以使用realloc函数对动态开辟内存大小进行调整
学习并使用realloc函数
函数的参数:
void* ptr:需要被扩容的动态开辟空间的起始位置的指针
size_t size:需要扩容的大小,单位是字节,值得注意的是:如果 ptr 现在的大小是40个字节,想要扩容到80个字节,那么在实参部分就要填入80,而不是40
函数的返回值:
void*:返回扩容后的动态空间的起始位置,同calloc,具体再使用的时候是使用者自己强制类型转换,且并不是每次都能在原地扩容
原地扩容:当需要扩容的空间后面有多余的空间时,就直接在原空间直接扩容
异地扩容:当需要扩容的空间后面没有多余的空间时,就会重新在内存中找一块地方,直接开辟好所需的空间,并将原来空间的数据拷贝到新空间,最后再释放旧空间
代码演示:
// 动态开辟10个整型变量
int* parr = (int*)malloc(sizeof(int) * 10);
// 判断是否开辟成功
if (parr == NULL)
{
perror("malloc");
return -1;
}
// 扩容到60个整型变量
parr = (int*)realloc(parr, sizeof(int) * 60);
// 判断是否开辟成功
if (parr == NULL)
{
perror("malloc");
return -1;
}
代码验证:
未扩容前:
没有扩容前,动态开辟空间的地址是:0x013a9a48
扩容后:
地址发生了改变,变为:0x013adc98 ,说明发生了异地扩容