malloc/calloc/realloc这三个方法之间的区别
相同点
a.都是C语言中用来进行动态内存申请的库函数
b.申请的空间都在堆上,用完之后必须要使用free来进行释放
c.如果空间申请成功,返回空间的首地址,如果申请失败返回的是NULL,因此在使用之前必须要进行判空
d.返回值类型都是void*,在接收返回值时必须要进行强转
不同点
1.void* malloc(size_t size)
malloc的参数时用户所申请空间的字节数,申请空间成功返回空间的首地址,如果申请空间失败,返回的是空,用户在进行接收时必须要强转,使用时必须要进行判空,使用完成之后必须要借助free来进行释放。
2.void* calloc(size_t num, size_t size)
参数个数不同
num:表示元素的个数
size: 表示单个元素所占的字节数
功能上唯一的不同就是:calloc会将其申请的内容空间初始化为0
3.void* realloc(void* p, size_t size)
将p指向堆空间大小调整到size字节
p == NULL --> 该函数的功能与malloc类似–直接申请size个字节返回即可
p != NULL --> 将p指向的空间大小调整到size字节
假设:p指向空间的大小为oldsize字节
size <= oldsize:将p指向的空间缩小,然后返回原空间的首地址即可
size > oldsize:将p指向的空间扩大
1.大一点点 realloc(p, 16); 直接在p的基础上进行延伸
2.大许多 realloc(p, 40); 申请size个字节的新空间 将旧空间中的内容拷贝到新空间 释放旧空间,然后返回新空间的地址