这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。
size的单位为byte字节
返回类型为 void* ,所以在使用时可以由我们自己强制类型转换来决定
如果开辟成功,则返回一个指向开辟好空间的指针
如果开辟失败,则返回一个NULL指针
但是开辟好空间后,如果程序一直运行,那么这个空间将一直存在,如果我们不需要使用这个空间,那么这个空间将会浪费,所以应该及时释放这个空间
-------------------------------------------
C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收
ptr所指向的是开辟的空间的起始地址
如果参数 ptr 是NULL指针,则函数什么事都不做
malloc和free都声明在 stdlib.h 头文件中
代码演示如下:
#include二、calloc#include #include int main() { int* p = (int*)malloc(50); if (p == NULL)//判断p指针是否为空 { printf("%s",strerror(errno));//若为空指针,打印错误信息 return 1; } int i = 0; for (i = 0; i < 5; i++) { *(p + i) = 0; } free(p);//释放p指向的内存空间 p = NULL;//p所指向的空间被释放,p变为野指针,所以要把p置为空指针 return 0; }
calloc的功能是开辟num个大小为size字节的空间,并且将它全部初始化为0
与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0
代码演示如下:
int main()
{
int* p = (int*)calloc(5, 4);
if (p == NULL)
{
return 1;
}
free(p);
p = NULL;
return 0;
}
三、realloc
realloc的作用是调整动态内存空间的大小
ptr是所要调整空间的地址
size是调整之后的空间大小
realloc在调整空间扩大时,有两种情况
1.原有空间之后有足够大的空间
2.原有空间之后没有足够大的空间
代码演示如下:
int main()
{
int* p = (int*)malloc(40);//开辟40个字节的空间
if (p == NULL)
{
return 1;
}
int* ptr = (int*)realloc(p, 80);//将40个字节扩容为80字节
if (ptr != NULL) //不能直接int* p=(int*)realloc(p,80)
{ //因为若扩容失败则返回NULL给p
p = ptr;
}
free(p);
p = NULL;
return 0;
}



