c语言内存动态管理一般通过malloc,realloc,calloc和free完成的,它们都在stdlib.h库中,使用这些函数必须先包含头文件。这些函数可以让程序员动态的申请释放内存,更高效的利用内存。
#include<stdlib.h>
1.malloc主要用法
void *malloc(size_t size);
(1).参数
malloc有一个参数size,该参数控制malloc申请多大的空间(单位:字节),通常可以与sizeof()一起用。
(2).返回值
如果申请成功malloc会返回申请空间起始位置的地址,但是该指针类型为void*,一般要搭配强制类型转换;如果申请失败则会返回空指针,为了避免野指针,要在检查返回指针是否为空才能用该指针。
#inclide<stdlib.h>//包含头文件
#include<stdio.h>
int main()
{
int*p=(int*)malloc(sizeof(int)*10);//申请10个int类型大小的空间
//类似于10个int类型数组,只不过存放在堆区
if(NULL==p)//检验是否申请成功
{
printf("malloc wrong");
return 1;
}
}
2.calloc用法
void *calloc(size_t num, size_t size);
(1)参数
calloc有两个参数:num和size。num是元素个数,size是每个元素大小。
(2)返回值
同malloc。
总结malloc和calloc用法和效果很相似,区别有两点:1.参数不同。2.realloc申请空间会初始化为0。
3.realloc用法
void *realloc(void* _Block,size_t _Size);
realloc一般是给已有空间扩容的。
(1)参数
realloc有两个参数:第_Block写已有空间起始地址,第_Size写改变后的大小。
(2)返回值
同malloc。
4.free用法
void free(void* ptr);
(1)参数
free有一个参数。ptr即为要释放的空间的起始位置。
(2)返回值
free没有返回值。
注意:
(1)malloc,realloc,calloc都要检查返回值。
(2)realloc前一定要用malloc,realloc申请空间。
(3)空间用完后一定要释放空间。