【C语言】动态内存函数

以下所介绍的函数,头文件均为stdlib.h,所开辟空间均在堆上。

一.malloc函数

void * malloc(size_t size);

这个函数向内存申请一块连续可用的空间,并返回指向这片空间的指针
如果开辟成功,返回指针;
如果开辟失败,返回NULL;

void free(void * ptr);

用来释放所申请的内存。
测试代码

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#pragma warning(disable:4996)
int main()
{
	int num,i=0;
	int * ptr;
	scanf("%d", &num);
	ptr = (int *)malloc(num * sizeof(int));
	if (ptr != NULL)
	{
		for (; i < num; i++)
		{
			*(ptr + i) = i + 1;
		}
		for (i=0; i < num; i++)
		{
			printf("%d\n", *(ptr + i));
		}
	}
	else {
		printf("error!");
	}
	free(ptr);
	system("pause");
	return 0;
}

二.calloc函数

与malloc函数功能相同。

void * calloc (size_t  num, size_t size);

与malloc的不同:1.申请num个size大小的空间;
2.申请成功后,将这一空间内全部初始化为0。

三.realloc函数

对已申请的动态空间,灵活做大小调整。

void * realloc(void * ptr , size_t size);
  • ptr为要调整空间的指针;
  • size为调整之后的新大小;
  • 返回值为调整之后动态空间指针;
  • 尽量使用中间变量判空,在保存新的指针;
int * p;
p = realloc(ptr,size);
if(p != NULL)
{
ptr=p;
}
 free(ptr);

四.注意TIP

  • free之后,空间内容并没有立即清空,指针也还指向该空间;
  • 可在子函数动态申请空间,注意要传二级指针。
char * aaa(char **p)
{
	*p = (char *)malloc(100);
}
int main()
{
	char * str = NULL;
	aaa(&str);
	if (str != NULL)
	{
       strcpy(str, "hello");
	   printf(str);
	}
	free(str);
	return 0;
}
发布了53 篇原创文章 · 获赞 49 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43550839/article/details/98499164