您的位置:首页 > 其它

Malloc(),realloc(),calloc(),free()的用法及含义

2017-10-17 01:05 435 查看
Malloc(),realloc(),calloc(),free()的用法及含义:
1. malloc(),表示动态申请内存,以字节为单位
eg:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p=(int*)malloc(10*sizeof(int));
for(int i=0;i<10;i++)
{
p[i]=0;
printf("%d ",p[i]);
}
free(p); //形参为申请内存块的首地址
printf("\n");
return 0;
}
2.Realloc() //在使用过程中发现不够用
Eg:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p = (int *)malloc(10*sizeof(int));
int i;
for(i=0;i<10;i++)
{
p[i]= i;//用p
}
//发现不够
int *p1=(int*)realloc(p,20*sizeof(int));
//p为原地址,20*sizeof(int)为新内存的字节数
for(int j=i;j<20;j++)
{
p[j]=j;
}
for(int k=0;k<20;k++)
{
printf("%d ",p1[k]);
}
printf("\n");
free(p);
p=p1;
p1=NULL;
free(p1);
return 0;
}
//以下代码实现功能与realloc函数相同
#include<stdio.h>
#include<stdlib.h>
int main()
{
//realloc
int *p = (int *)malloc(10*sizeof(int));
int i;
for(i=0;i<10;i++)
{
p[i]= i;//用p
}
//在使用过程中发现p长度不够用,需要20个格子
int *q = (int *)malloc(20*sizeof(int));//1
for(i=0;i<10;i++) //2
{
q[i]= p[i];
printf("%d ",q[i]);
}
for(int j=i;j<20;j++)
{
q[j]=j;
printf("%d ",q[j]);
}
free(p);//3
p= q; //4
q= NULL;//浅拷贝
free(q);
return 0;
}
3. Calloc():动态申请,并把每个格子都初始化为0
Eg:
int*p1=(int*)calloc(20*sizeof(int));
//申请了长度为20的int类型数据内存(80字节)
4.利用malloc创建内存,利用free释放内存,如果没有释放,则出现内存泄漏(泄露)
出现内存泄露,则可用内存越来越少,设备速度越来越慢
1) 、程序退出,操作系统将程序消耗的内存全部回收
2) 、关机
Free()崩溃原因:
1、越界;
2、指针的指向移到;
3、重复释放
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: