//动态分配内存:
/*
栈上的随机值:0xcccccccc
堆上的随机值:0xcdcdcdcd
malloc申请完内存后值为随机值
calloc:默认值为0
malloc:默认值为随机值
二者参数不同
void *malloc(size_t size);
size:分配的字节
malloc:分配连续的堆内存空间
ptmalloc
glibc内存管理
mallo分配连续的堆内存空间
判断动态内存是否分配成功
必须程序员手动释放
free()
free()释放内存,有几种情况崩溃?
1、指针发生移动
2、重复释放同一块内存
3、释放了不是动态内存开辟的空间
4、越界(堆越界不受保护)
小于128KB调用哪个函数
大于128KB调用哪个函数
*/
/*
int main()
{
int *p=(int *)malloc(1024*1024*1024*1);//堆
assert(p!=NULL);
free(p);
p=NULL;
return 0;
}
*/
/*筛选法求素数
void Prime(int n)
{
int *p=(int *)malloc(n*sizeof(int));
assert(p!=NULL);
for(int i=0;i<n;i++)
{
p[i]=1;
}
for(int j=0;j<n;j++)
{
for(int num=2;num<j;num++)
{
if(j%num==0)
{
p[j]=0;
}
}
}
for(int k=0;k<n;k++)
{
if(p[k]==1)
{
printf("%d\n",k);
}
}
}
int main()
{
Prime(100);
printf("%d\n",Prime);
return 0;
}
*/
int main()
{
int *p=(int *)calloc(5,sizeof(int));//默认值为0
int *p2=(int *)malloc(5*sizeof(int));//默认值为随机值
int *p3=(int *)realloc(p,10*sizeof(int));//默认值为随机值
//参数不同
}