c 语言 malloc calloc realloc free 解释
时间: 2023-08-20 19:22:43 浏览: 199
在C语言中,动态内存分配与释放是非常常见的操作。C语言提供了四个函数来实现动态内存分配与释放,分别是malloc、calloc、realloc和free。
1. malloc函数
malloc函数用于在内存堆中分配一块指定大小的内存空间,并返回其首地址。其基本语法如下:
```c
#include <stdlib.h>
void* malloc(size_t size);
```
其中,size_t是一个无符号整型类型,用于表示需要分配的内存空间大小(以字节为单位)。malloc函数返回一个void类型的指针,指向分配的内存空间的首地址。如果分配失败,则返回NULL。
例如,以下代码用于在内存堆中分配10个int类型的数组空间:
```c
int *p = (int *) malloc(10 * sizeof(int));
```
2. calloc函数
calloc函数用于在内存堆中分配一块指定大小的内存空间,并将其清零,然后返回其首地址。其基本语法如下:
```c
#include <stdlib.h>
void* calloc(size_t num, size_t size);
```
其中,num和size都是size_t类型的整数,用于表示需要分配的内存空间大小(以字节为单位)。calloc函数返回一个void类型的指针,指向分配的内存空间的首地址。如果分配失败,则返回NULL。
例如,以下代码用于在内存堆中分配10个int类型的数组空间,并将其清零:
```c
int *p = (int *) calloc(10, sizeof(int));
```
3. realloc函数
realloc函数用于重新调整已经分配的内存空间的大小,可以扩大或缩小内存空间。其基本语法如下:
```c
#include <stdlib.h>
void* realloc(void* ptr, size_t size);
```
其中,ptr是需要重新调整大小的内存空间的首地址,size是需要调整的大小(以字节为单位)。realloc函数返回一个void类型的指针,指向调整后的内存空间的首地址。如果调整失败,则返回NULL。
例如,以下代码用于将之前分配的10个int类型的数组空间扩大为20个int类型的数组空间:
```c
int *p = (int *) malloc(10 * sizeof(int));
p = (int *) realloc(p, 20 * sizeof(int));
```
4. free函数
free函数用于释放之前分配的内存空间,将其归还给内存堆。其基本语法如下:
```c
#include <stdlib.h>
void free(void* ptr);
```
其中,ptr是需要释放的内存空间的首地址。调用free函数后,该内存空间将不再可用,程序不能再访问该内存空间中的数据。
例如,以下代码用于释放之前分配的10个int类型的数组空间:
```c
int *p = (int *) malloc(10 * sizeof(int));
free(p);
```
需要注意的是,为了避免内存泄漏和野指针问题,程序员需要谨慎使用动态内存分配与释放,尽量避免不必要的内存分配和释放。同时,为了确保程序的稳定性和可靠性,程序员需要在使用动态内存分配时,充分考虑内存分配失败的情况,并做好错误处理。
阅读全文