malloc , calloc, realloc的区别
malloc
void* malloc (size_t size);
calloc
void* calloc (size_t num, size_t size);
realloc
void* realloc (void* ptr, size_t size);
共同点
- 从堆上申请内存空间
- 返回值都是void*
- 都需要强转
- 申请完使用都需要判空
- 都需要free
不同点
- malloc申请的空间没有初始化,calloc申请的空间会初始化为0
- realloc重新申请空间
- 新申请的空间小于原来的空间,只是缩小原来的空间范围
- 新申请的空间大于原来的空间(不是特别大), 在原来的空间基础上扩大空间范围
- 新申请的空间大于原来的空间(特别大),重新申请空间(地址改变)
- 申请新空间
- 将原来空间的元素拷贝到新空间
- 释放旧空间
- 返回新空间
~待补充