动态内存分配在堆 ,至少有1G;
局部变量分配在栈, 至少1M;
动态内存中会涉及到三个函数:
一、malloc 动态开辟内存
eg: int *arr=(int*)malloc(n*sizeof(int)) //相当于 int arr[n] , malloc里面的参数算出的为字节数
//int* 为强转,因为malloc返回值是 void*
free(arr); //用于释放内存
二、calloc 动态开辟内存
eg: int *p=(int *)calloc(10,sizeof(int)) //参数1位为有几个格子,参数2为类型的字节数
for(int i=0;i<10;i+=)
{
p[i]=0;
} //与上面那一句效果相同
三、realloc 用于扩大(或缩小)
eg: int *p=(int *)realloc (10*sizeof(int)) 新的内存大小单位
将P的内存扩大为原来的2倍
int P=(int*)realloc(p,20*sizeof(int)) //括号里面的p为原地址的P,而内存大小为新的大小,与上面的内存无关
//扩大之后再把新的地址传给P
动态内存会遇到的三个问题:
1、指针移动,指针不再指向动态内存的起始地址
2、越界问题,将尾信息篡改
3、重复释放同一段内存