动态内存
动态创建内存
1.malloc()
例:int *p=(int *) malloc(n*sizeof(int)) //相当于int p[n]
2.calloc()
将创建好的内存初始化为0
最大问题:内存泄漏
例:int *p=(int *) calloc(n,sizeof(int)) //n为要创建的数组大小
3.realloc(p,n*sizeof()) //扩大内存
p为原地址,n为新的要创建的数组大小
4.free()
例:free(p) //释放p
注:free()崩溃的原因
(1)越界
例:
int main()
{
int *p1 = (int *)malloc(20);
for(int i=0;i<20;i++)
{
p1[i] = 0;
}
free(p1);
return 0;
}
(2)指针移动
例:
int main()
{
int *p = (int *)malloc(10*sizeof(int));
for(int i=0;i<10;i++)
{
*p = 0;
p++;
}
free(p);
return 0;
}
(3)重复释放内存
例:
int main()
{
int *p = (int *)malloc(10*sizeof(int));
int *q = p;
free(p);
free(q);
return 0;
}
(4)释放不是动态创建的内存
例:
int main()
{
int a = 10;
free(&a);
return 0;
}