动态内存
malloc 动态申请内存
int *arr=(int*)malloc(n*sizeof(int)) //int arr[n]
定义一个n长度的数组;
如果要使用,需引用头文件 <stdlib.h>
需注意:
1.栈的大小1M,可配;
2.堆的分配的最大连续块1.2G
calloc动态申请内存,并将里面的值置为0
int*arr=(int *)calloc(a,sizeof(int))
等同于:
int*arr=(int*)malloc(a*sizeof(int))
for(int i=0;i<a;i++)
{
arr[i]=0;
}
relloc重新申请动态内存
比如我们第一次申请了a个格子的动态内存,但是发现不够用,我们需要申请2a个格子的动态内存。
int*arr=(int *)relloc(arr,2*a*sizeof(int));
以上等同于
int*arr=(int *arr)malloc(a*sizeof(int));
int*brr=(int *arr)malloc(2*a*sizeof(int));
for(i=0;i<a;i++)
{
brr[i]=arr[i];
}
arr=brr;
brr=NULL;
会有内存泄漏问题
解决方法free
//free 释放,解决内存泄漏
原因:1.越界,漏乘sizeof,relloc第二个参数写错
2.指针没有指向首地址(改变地址指向)
3.重复释放内存
4.释放的不是动态申请的内存