动态内存分配是程序运行时管理内存的一种方式。malloc
、calloc
和realloc
是C语言提供的三个用于动态内存分配的标准库函数,它们都定义在stdlib.h
头文件中。以下是对这三个函数的详细讲解:
malloc
malloc
函数用于在堆上分配一块指定大小的内存区域。它返回一个指向分配内存的指针,如果内存分配失败,将返回NULL
。
函数原型:
void* malloc(size_t size);
size
:要分配的内存大小,单位为字节。
使用示例:
#include <stdlib.h>
int main() {
int *array = (int*)malloc(5 * sizeof(int)); // 分配一个整型数组的空间
if (array == NULL) {
// 处理内存分配失败的情况
}
// 使用分配的内存
free(array); // 释放内存
return 0;
}
calloc
calloc
函数用于分配一块足够大的内存区域以存储一个数组,其每个元素都初始化为0。
函数原型:
void* calloc(size_t num, size_t size);
num
:要分配的元素数量。size
:每个元素的大小,单位为字节。
使用示例:
#include <stdlib.h>
int main() {
int *array = (int*)calloc(5, sizeof(int)); // 分配一个整型数组,初始化为0
if (array == NULL) {
// 处理内存分配失败的情况
}
// 使用分配的内存
free(array); // 释放内存
return 0;
}
realloc
realloc
函数用于调整之前通过malloc
或calloc
分配的内存块的大小。
函数原型:
void* realloc(void *ptr, size_t new_size);
ptr
:之前分配的内存块的指针。new_size
:新的内存大小,单位为字节。
使用示例:
#include <stdlib.h>
int main() {
int *array = (int*)malloc(5 * sizeof(int));
// 假设需要扩大数组大小
array = (int*)realloc(array, 10 * sizeof(int));
if (array == NULL) {
// 处理内存重新分配失败的情况
}
// 使用新分配的内存
free(array); // 释放内存
return 0;
}