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

c语言中动态内存管理(1)

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

c语言中动态内存管理(1)

1.为什么会存在动态内存分配

int arr[1000];

1.像这样建立一个数组,一开始建立了这么大一个空间,可能会造成空间浪费,无法一次性用完

2.静态空间开辟的大小比较固定

3.对于空间的使用,只有我们在运行程序的时候才知道

->因此我们就需要动态内存开辟了

2. 要学习动态内存开辟,就要了解内存中的三个区

 

 

这些函数都包含在:

#include

 

 3.(1)malloc的使用

malloc函数的定义

void* malloc(size_t size)

返回一个无类型的指针,括号中包含的是开辟的字节数

开辟不成功会返回一个空指针

上代码

int main()
{
	//int arr[10];
	int*p = (int*)malloc(100 * sizeof(int));//开辟10个整形空间,有可能会开辟失败

	if (p == NULL)
	{
		printf("malloc error");
		return;
	}
	//可以使用
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		*(p + i)=i;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d", p[i]);
	}
	//回收空间用free
	free(p);
	p = NULL;//用完把他做成空指针
	return 0;
}

3.(2).calloc的使用

calloc函数的定义

void* calloc(size_t num,size_t size)

num是开辟的是元素的个数

size为每个元素的长度,单位是字节,1个元素多大

会将里面的元素都初始化为0

上代码

int main()
{
	
	int *p = calloc(10, sizeof(int));//会初始化为0,但参数不一样,其他都一样
	if (p == NULL)
	{
		printf("错误");
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d", *(p + i));
	}
return 0;
}

3.3realloc的使用

realloc函数的定义

void*realloc(void* ptr,size_t size)

p要增加的地址,逗号后面是新的大小,而非增加的大小,返回的是void*,指向的是重新调整之后的内存块
ptr为要调整的内存地址
size为调整之后的大小

int main()
{
	
	int *p = calloc(10, sizeof(int));//会初始化为0,但参数不一样,其他都一样
	if (p == NULL)
	{
		printf("错误");
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d", *(p + i));
	}

	
	if (ptr != NULL)


	{
		p = ptr;
	}
	
	free(p);
	p = NULL;

	return 0;
}

realloc实现会出现两种情况

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

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

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