malloc函数
void *malloc(size_t size);
//开辟一块连续size字节的空间
引入
//int a[3];
int *a=(int *)malloc(3*sizeof(int));
int i;
for(i=0;i<3;i++)
a[i]=i;
for(i=0;i<3;i++)
printf(" %d ",a[i]);
free(a);
int n,i;
printf("请输入学生的个数:");
scanf("%d",&n);
int *p;
p=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
printf("请输入第%d个学生成绩:",i+1);
scanf("%d",&p[i]);
}
printf("**********************\n");
for(i=0;i<n;i++)
printf("%d个学生的成绩为:%d\n",i+1,*p++);
内存泄漏
1.程序刚运行的时候正常,时间长后崩溃
如:
此程序作为内存泄漏典例,请谨慎运行
while(1)
{
int *p=malloc(1024);
//malloc申请的空间程序不会主动释放
//在Linux中,程序结束后,系统会收回这个空间
sleep(1);
}
避免
> 1.循环中有无一直在申请
2.有无及时释放 free(p) p=NULL;
避免变成野指针
野指针
int *p; //野指针
//野指针指向哪不清晰,有危险
int *p=NULL; //非野指针