动态内存函数:malloc(n字节),calloc(),realloc()

1、申请内存函数:malloc(n字节)

一般用法:malloc(n*sizeof(int))

#include<stdib.h>//申请内存与释放内存
#include<vld.h>//检测内存泄漏
#include《assert.h>//断言
int main()
{
   int *p=(int*)malloc(10*sizeof(int));//申请10个格子的内存,共40字节
	assert(p!=NULL);
	p[1];//申请的内存未初始化,结果为0xcdcd(对应汉字:屯),即动态内存未初始化时,0xcdcd(对应汉字:屯);局部变量未初始化时,0Xcccc(对应汉字:烫)
 
for(int i=0; i<10; i++)
  {
   p[i]=0;//将申请的40个字节,10个格子全部初始化为0;聚合类型初始化只有在定义时才能整体初始化,其他时候只能通过循环进行初始化。
  }
free(p);//释放内存,防止内存泄漏
}
2、calloc()函数

用法:int *p1=calloc(10,sizeof(int))//10为想要申请的格子数10,sizeof(int)为每个格子的大小

功能:申请动态内存并全部初始化为0.

缺点:虽然参数用反了对结果无影响,但是总是担心这里出错。当程序出错时,总想检查检查这个函数。所以一般不用。
3、扩容

(1)定义;当申请的动态内存不够时,就需要扩充内存大小,这就是扩容。

(2)扩容思想:一、申请一个新的动态内存;二、将原数据拷贝到新的内存;三、释放原内存;四、将新内存的名字修改为原来的内存名字、五、将新申请的内存名字置空

(3)程序演示

int *q=(int *)malloc(20*sizeof(int));//扩容到20个格子,总大小为80字节(一)

for(int i=0; i<10; i++)//原数据有10个格子,所以i<10      (二)

{

q[i] =p[i];//将原数据拷贝到新申请的内存中

}

free(p);//释放原来的内存         (三)

p=q;//将指针q赋值给p,即将q的名字改为原来的名字p   (四)

q=NULL;//将新申请的内存名字置空 (五)


4、扩容函数realloc

用法:p=(int*)realloc(p,20*sizeof(int))

重新开辟20个格子的内存,将p中的内容移到新开辟的内存中并重新取名为p,首地址不变,看起来就像直接增加了10个格子,所以叫扩容。

5、缩小容量,会被系统忽略


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值