栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】动态内存函数的介绍及使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】动态内存函数的介绍及使用

一、malloc和free

 这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。

size的单位为byte字节

返回类型为 void* ,所以在使用时可以由我们自己强制类型转换来决定

如果开辟成功,则返回一个指向开辟好空间的指针

如果开辟失败,则返回一个NULL指针

但是开辟好空间后,如果程序一直运行,那么这个空间将一直存在,如果我们不需要使用这个空间,那么这个空间将会浪费,所以应该及时释放这个空间

-------------------------------------------

C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收

 ptr所指向的是开辟的空间的起始地址

如果参数 ptr 是NULL指针,则函数什么事都不做

malloc和free都声明在 stdlib.h 头文件中

代码演示如下:

#include
#include
#include
int main()
{
	int* p = (int*)malloc(50);
	if (p == NULL)//判断p指针是否为空
	{
		printf("%s",strerror(errno));//若为空指针,打印错误信息
		return 1;
	}
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		*(p + i) = 0;
	}
	free(p);//释放p指向的内存空间
	p = NULL;//p所指向的空间被释放,p变为野指针,所以要把p置为空指针
	return 0;
}
二、calloc

 calloc的功能是开辟num个大小为size字节的空间,并且将它全部初始化为0

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

代码演示如下:

int main()
{
	int* p = (int*)calloc(5, 4);
	if (p == NULL)
	{
		return 1;
	}
	free(p);
	p = NULL;
	return 0;
}

 三、realloc

 realloc的作用是调整动态内存空间的大小

ptr是所要调整空间的地址

size是调整之后的空间大小

realloc在调整空间扩大时,有两种情况

1.原有空间之后有足够大的空间

2.原有空间之后没有足够大的空间

 代码演示如下:

int main()
{
	int* p = (int*)malloc(40);//开辟40个字节的空间
	if (p == NULL)
	{
		return 1;
	}
	int* ptr = (int*)realloc(p, 80);//将40个字节扩容为80字节
	if (ptr != NULL)                //不能直接int* p=(int*)realloc(p,80)
	{                               //因为若扩容失败则返回NULL给p
		p = ptr;
	}
	free(p);
	p = NULL;
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号