动态内存分配

动态内存分配的特点:

1、不需要预先分配存储空间;

2、分配的空间可以根据程序的需要扩大和缩小。

要实现根据程序的需要动态分配存储空间,需要用到malloc、calloc、realloc、free函数。

各个函数有特定的功能:

malloc函数:申请内存

calloc函数:初始化为0

realloc函数:修改内存大小(扩大,缩小)

free函数:释放内存,内存泄漏

由一个例子来解释一下:

动态申请100整型单元,并且每个单元值为0。

int *arr=(int *)malloc(n*sizeof(int));
int i;
for(i=0;i<n;i++)
{
    arr[i]=0;
}

for循环语句等同于memset函数

memset(arr,0,100*sizeof(int));

这个函数仅限设0。

如果用calloc函数来写,calloc函数比malloc函数多了置0功能,所以用一条语句就可以解决这个问题,但需要用到两个参数。

int *arr=(int *)calloc(100,sizeof(int));

再来看看realloc函数,修改内存大小。(等同于乔迁新居:从旧房子搬到新房子,把所有的家具搬过去(复制原数据),把旧房子卖掉(释放原内存),把地址改成新居地址(更新地址))

int *arr=(int *)malloc(100*sizeof(int));
for(int i=0;i<100;i++)//模拟数组使用
{
    arr[i]=i;
}
//等同realloc
/*
int *brr=(int *)malloc(200*sizeof(int));//创建更大的空间
for(int i=0;i<100;i++)//复制原数据
{
    brr[i]=arr[i];
}
//释放原内存
free(arr);
//更新地址
arr=brr;
brr=NULL;
*/
arr=(int *)realloc(arr,200*sizeof(int));
printf("%d\n",arr);
free(arr);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值