动态开辟内存空间函数

文章目录

  • malloc函数
  • calloc函数
  • malloc函数和calloc函数的不同
  • free函数
  • realloc函数

malloc函数

在这里插入图片描述
在这里插入图片描述
参数是要开辟内存空间的大小
开辟成功则返回值为开辟空间的首地址,若开辟失败则返回一个空指针NULL

calloc函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个参数为开辟空间的元素个数,第二个参数为每个元素的大小
开辟成功返回值为开辟空间的首地址,开辟失败返回值为空指针NULL

malloc函数和calloc函数的不同

除了参数不同外开辟后的结果也是不同的,malloc开辟好的空间不会被赋值,calloc开辟好的空间会被赋值

#include 
#include 
#include 

int main()
{
	int* ptr1 = (int*)malloc(10 * sizeof(int));
	assert(ptr1);
	int* ptr2 = (int*)calloc(10, 4);
	assert(ptr2);
	free(ptr1);
	free(ptr2);
	ptr1 = NULL;
	ptr2 = NULL;
	return 0;
}

在这里插入图片描述

free函数

在这里插入图片描述
在这里插入图片描述
参数为一个指针,指向的是用malloc,calloc,realloc函数开辟的空间的,如果不是动态开辟空间,结果不确定,标准没有定义。

realloc函数

在这里插入图片描述
在这里插入图片描述
第一个参数为已经动态申请好的空间地址,第二个参数为重新开辟空间的大小,不是再增加这么大的空间大小,而是总共开辟这么大的空间大小。

#include 
#include 
#include 

int main()
{
	int* ptr1 = (int*)malloc(20);
	assert(ptr1);
	int* ptr2 = (int*)realloc(ptr1,40);
	assert(ptr2);
	free(ptr2);
	ptr2 = NULL;
	return 0;
}

**注意:**使用realloc函数时,要用另一个指针来接收,如ptr2。因为有可能在这个地址后的内存空间大小不能满足需要扩容的空间大小,所以有可能重新开辟的空间起始地址与第一次开辟的起始地址不一致。
如果扩容失败则返回空指针NULL

你可能感兴趣的:(C,c语言)