1.malloc
malloc函数在使用时需要传过去开辟的字节个数,并返回开辟空间的起始地址,由于返回的地址为无类型的我们需要对它进行强制类型转换成我们需要的类型。
如果malloc开辟内存空间失败则malloc会返回空指针NULL。
int* p = (int*)malloc(10 * sizeof(int));
if (p == NULL)
{
printf("开辟失败\n");
}
else
{
printf("开辟成功\n");
}
2.free
动态开辟是在堆区上开辟内存的,而堆区上开辟的内存需要程序员手动释放,否则会造成内存泄漏。
释放内存所需要的函数为free函数。
要注意的是在释放完空间后p指针还是指向之前开辟的空间,为了安全,我们需要将指针p指向NULL。
free(p);//释放内存
p = NULL;//将p置为空指针
3.calloc
使用calloc函数需要传入两个参数,一个是元素个数,一个是每个元素的字节大小。
与malloc函数不同的是,calloc函数会将开辟空间的每个字节都初始化为0
calloc开辟空间失败也会返回空指针NULL
4.realloc
但我们使用malloc或calloc开辟的内存空间不够了或太大了,就可以通过reallco函数来扩大或缩小开辟的内存空间。
为了防止因为realloc开辟空间失败而导致p找不到原来开辟的空间,我们需要用一个新指针ptr来判断是否开辟空间成功。
int* p = (int*)malloc(10 * sizeof(int));
if (p == NULL)
{
printf("开辟失败\n");
}
else
{
printf("开辟成功\n");
}
int* ptr = (int*)reallco(p, 20 * sizeof(int));
if (ptr != NULL)
{
p = ptr;//开辟成功将p指向开辟的空间
}
else
{
printf("开辟失败\n");
}
free(p);//释放内存
p = NULL;//将p置为空指针