总结——动态内存管理

博客IDLanFuRen
C系列专栏C语言重点部分  C语言注意点  C++基础  Linux  数据结构  C++注意点
声明等级:黑色->蓝色->红色
欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦

目录

1.动态内存管理的用途

2.malloc calloc函数的使用

1)malloc&calloc函数的使用

2)free的使用

3.realloc的使用

今天来谈谈动态内存管理,这个在之后的数据结构的学习中有很大的占比空间。

1.动态内存管理的用途

想要理解动态内存管理的用途,首先我们来观察一下这个数组int arr[10]={0};这个数组是不是已经开辟好了空间,而且固定的是40个字节,不能修改。

空间开辟大小是固定的。

数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了大小不能调整。

动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了,透露一下realloc是最重要也最有意义的动态内存开辟的函数。

2.malloc calloc函数的使用

1)malloc&calloc函数的使用

还是去看c++官网:

头文件是stdlib.h 返回类型是void* 参数是开辟的字节空间

我们直接上一串代码来看看malloc的使用

int main()
{
	//用malloc申请40个字节的空间
	int* p = (int*)malloc(40);
	if (p == NULL)//开辟失败
	{
		perror("malloc");
		return -1;
	}
	for (int i = 0; i < 10; i++)
	{
		*(p + i) = i;
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", *(p + i));
	}
	//释放空间
	free(p);//释放掉p指向的所开辟的空间,而p的起始地址没有被释放掉
	p = NULL;
	return 0;
}

calloc跟malloc差不多,但是会直接给每个空间内容初始化为0。

int* p = (int*)calloc(40,sizeof(char));这样改就没问题了。 

2)free的使用

相信大家看上面的代码很容易发现free(p)->p=NULL;这两个语句,而且必须是连着使用的,因为free会销毁p指针所指向(开辟)的那块空间,如果接下来把p解引用的话,就会出现野指针的问题(找到内容但没有找到空间),所以我们得把p指向空地址NULL,这样的话就不会出现野指针问题了,销毁该空间的代码也就全部完成了,这就是一个完整的动态内存开辟的代码了。 

3.realloc的使用

relloc的使用是在原有已经动态开辟的空间继续开辟,而且该函数非常人性化。如果本来开辟的内存是够的,那么便会在原有的基础上继续开辟空间;如果原有的空间不支持现在realloc想增加开辟的字节数的话,realloc会自己重新开辟一个新空间把旧与新内存一并开辟到新空间,并销毁旧空间。之后还是需要free的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值