1.void * malloc( size_t size );
size:分配的字节。
连续的堆空间
ptmalloc
glibc内存管理
小于128KB,调用底层那个函数
大于128KB,调用那个函数
2.free()释放内存,有几种情况会奔溃???
1、指针发生移动
2、重复释放同一块内存
3、释放了不是动态内存开辟的空间
4、越界
int *p = (int *)malloc(n*sizeof(int));
assert(p != NULL);
for(int i=0;i <5;i++)//越界不受保护,栈和保留区受保护
{
p[i]=0;
}
free(p);
3malloc,calloc
//默认值为0
int *p = (int *)calloc(5,sizeof(int));// malloc
int *p2 = (int )malloc(5sizeof(int));//
//随机值
int *p3 = (int )realloc(p2,10sizeof(int));//
int p3=(int )realloc(p,10sizeof(int));//两种方式,p后面有就扩大,如果不够,再重新开辟扩大后的大小,之前的不要了。搬家原来的是数据
int p=(int )malloc(1024102410241);//开辟连续的堆上的空间,最大2G不到
4.例题
char *str = (char *) malloc(100);
strcpy(str, "hello");
free(str);//free后没有置空
if(str != NULL)
{
strcpy(str, "world");//不起作用
printf("=======%s\n",str);
}