malloc和free
调用malloc函数的语法:
void* malloc(size_t size);
这个函数向内存申请一块连续可用的空间,如果开辟成功就返回指向这块空间的指针,如果开辟失败则返回一个NULL指针。因为malloc函数有开辟失败的可能,因此malloc的返回值一定要做检查。
此外因为返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。
如果参数size为0,malloc的行为标准是未定义的,取决于编译器。
C语言提供了一个free函数,用来释放动态开辟的内存。
calloc
void* calloc(size_t num, size_t size);
其中,num代表要开辟的元素个数,size代表开辟的每个元素的大小。
calloc特殊的地方在于,返回之前会将这块空间的内容初始化成全0。
realloc
realloc使动态内存开辟更加灵活 。
void* realloc(void* ptr, size_t size);
ptr是要调整的那块空间的起始位置,size是空间调整后的大小。如果原空间后的空间能满足追加后空间的大小,则在原空间后追加。如果原空间后的空间不够,realloc函数会另外找一片连续的空间,把原空间的数据拷贝到新的空间里,并释放掉原空间,最后返回新空间的地址。
因为realloc函数同样有可能开辟失败而返回空指针,因此在用原来的指针接受realloc函数的返回值时也要先判断返回值是否为NULL。
注意:多次进行开辟动态内存会造成内存碎片化。