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、重复释放
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、重复释放
相关文章推荐
- C语言 calloc, malloc, realloc ,alloca以及 free的用法
- 关于malloc、free、new、delete以及calloc、realloc基本库函数与运载符的含义
- Linux 内存分配,malloc(), free(),calloc(),realloc()用法
- C++中的new和delete,C中的free、malloc、calloc、realloc、_alloca
- c语言中的内存分配malloc、alloca、calloc、malloc、free、realloc、sbr
- malloc与calloc,realloc动态内存的用法
- malloc、free、calloc、realloc、alloca
- realloc,malloc与calloc的用法[转]
- malloc、calloc、realloc、free
- malloc、realloc、calloc的一些用法
- calloc(), malloc(), realloc(), free(),alloca()
- malloc realloc calloc用法小结
- malloc()、free()、calloc()与realloc()
- calloc、malloc、realloc的用法与区别
- 动态分配内存函数——calloc,free,malloc,realloc
- C语言中malloc,calloc,realloc,free的语法与作用
- malloc ? realloc ? free ? calloc ?
- malloc,calloc,realloc,free
- calloc(), malloc(), realloc(), free(),alloca()
- Linux C语言应用 - main函数解析,时间函数,C语言代码的分配机制(malloc,calloc,realloc,free)