关于动态内存不得不说的故事

如何创建动态内存

首先,会用到molloc语句,其实好多小伙伴都已经看出来了,没错这就是堆!
下面先来介绍一下栈和堆的概念:
1、栈(stack):有时候也叫“堆栈”,局部变量所在的内存区域,函数可以调用,window系统默认大小为1M;
2、堆(heap):动态内存开辟区域,大小接近1.5G,使用时需要注意释放内存。
使用时的代码如下:

 int *p=(int *)malloc(n*sizeof(int));
 //创建10n的整型数组并返回
 int Fun(int n)
 {
 int i=0;
 int *p=(int *)malloc(10*n*sizeof(int));
 for(i;i<10*n;i++)
 {
 return p;
 }
 }

colloc:等同于malloc,但只能把每个元素都置0.
语法如下:

calloc(n,sizeof(int));

realloc:用于修改动态内存的大小,一般用于扩容。
语法如下:

p=(int *)realloc(p,m*sizeof(int));

free:释放申请的内存,容易引起程序崩溃.
使用方法:

free();

内存泄漏:开辟内存,没有释放。
free崩溃的原因:
1.越界。多写符号,开辟内存少于malloc和realloc,忘记乘以sizeof(*);
2.移动指针的位置,如p(p为指针)++;
3.重复释放内存;
4.释放不是动态创建的内存,如局部数组int a[10].
并且,这些原因中出现概论最大的就是越界了,下来是移动指针的位置,再下来是重复释放内存,最后是释放不属于动态创建的内存。
今天的分享就到这里了,我们下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值