动态内存函数malloc,calloc,realloc函数介绍

1.malloc函数

函数原型:void*malloc(size_t size);

malloc函数,即memory allocation,中文叫动态内存分配。其作用是在内存的动态存储区中分配一个长度为size的连续空间。

如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

当内存不再使用时,应使用free()函数将内存块释放。

free()函数原型:void free(void *ptr);

free函数用来释放动态开辟的内存。 如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。 如果参数 ptr 是NULL指针,则函数什么事都不做。

举例:

void main()
{
	int n = 10;
	int *pa = (int *)malloc(sizeof(int)*n);//开辟一个动态整形空间
	if (pa == NULL)
	{
		printf("Out Of Memory\n");
		return;
	}
	free(pa);
}

开辟一个10个整形的动态内存空间,指针pa指向这个空间,判断是否分配成功,若不成功,打印"Out Of Memory",最后free(pa)释放内存块。

2.calloc函数

函数原型:void* calloc (size_t num, size_t size);

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。

与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。

举例:


	void main()
{
	int n = 10;
	int *pb = (int *)calloc(n, sizeof(int));//可以初始化
	if (pb==NULL)
	{
		printf("Out Of Memory\n");
		return;
    }
	free(pb);
}

如图所示,初始化为0:

动态内存函数malloc,calloc,realloc函数介绍_第1张图片

3.realloc函数

函数原型:void* realloc (void* ptr, size_t size); 

ptr 是要调整的内存地址, size 调整之后新大小 ,返回值为调整之后的内存起始位置。

作用:对动态开辟内存大小进行调整。

情况1:原有空间之后有足够大的空间 ,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。

情况2 :原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来 使用。这样函数返回的是一个新的内存地址。

举例:

void main()
{
	int n = 5;
	int *pa = (int *)malloc(sizeof(int)*n);//开辟一个动态整形空间
	if (pa == NULL)
	{
		printf("Out Of Memory\n");
		return;
	}
	int *tep=(int*)realloc(pa, sizeof(int)* 10);//改变申请空间的大小
	if (tep == NULL)//用临时指针接收
	{
		printf("Out Of Memory\n");
		free(pa);
		return;
	}
	else
	{
		pa = tep;
	}
	free(pa);
	pa = NULL;
}

 

你可能感兴趣的:(c++,算法,开发语言)