📅  最后修改于: 2023-12-03 14:40:25.567000             🧑  作者: Mango
动态内存分配是指在程序运行时动态地分配内存。在C语言中,使用malloc()、calloc()和realloc()三个函数来实现动态内存分配。
malloc函数用于申请一块指定大小的内存空间,并返回该空间的首地址。
void *malloc(size_t size);
其中,size_t是一个无符号整型,表示要申请的内存空间的大小,单位是字节(Byte)。
下面是一个使用malloc函数分配一维和二维数组的示例:
int n = 10;
int *array = NULL;
array = malloc(n * sizeof(int)); // 申请一维数组空间
if (array == NULL) {
printf("Failed to allocate memory.");
return -1;
}
int m = 5;
int **matrix = NULL;
matrix = malloc(m * sizeof(int *));
if (matrix == NULL) {
printf("Failed to allocate memory.");
return -1;
}
for (int i = 0; i < m; i++) {
matrix[i] = malloc(n * sizeof(int)); // 申请二维数组空间
if (matrix[i] == NULL) {
printf("Failed to allocate memory.");
return -1;
}
}
calloc函数用于申请一块指定大小的内存空间,并初始化为0,并返回该空间的首地址。
void *calloc(size_t nmemb, size_t size);
其中,nmemb和size两个参数都是无符号整型,nmemb表示要申请的内存空间的个数,size表示每个元素的大小。
下面是一个使用calloc函数申请一维数组的示例:
int n = 10;
int *array = NULL;
array = calloc(n, sizeof(int)); // 申请一维数组空间
if (array == NULL) {
printf("Failed to allocate memory.");
return -1;
}
realloc函数用于重新分配内存空间,并返回该空间的首地址。如果重新分配的空间大小比原来的空间大小要大,那么新分配的空间将被初始化为0。
void *realloc(void *ptr, size_t size);
其中,ptr是一个指向以前由malloc、calloc或realloc函数返回的内存空间的指针,size表示要重新分配的内存空间大小。
下面是一个使用realloc函数重新分配一维数组的示例:
int n = 10;
int *array = NULL;
array = malloc(n * sizeof(int)); // 申请一维数组空间
if (array == NULL) {
printf("Failed to allocate memory.");
return -1;
}
int m = 20;
array = realloc(array, m * sizeof(int)); // 重新分配一维数组空间
if (array == NULL) {
printf("Failed to reallocate memory.");
return -1;
}
动态分配的内存空间必须在使用完毕后及时释放,以免造成内存泄漏。使用free函数可以释放动态分配的内存空间。
void free(void *ptr);
其中,ptr是一个指向以前由malloc、calloc或realloc函数返回的内存空间的指针。
下面是一个释放动态分配的内存空间的示例:
int *array = malloc(n * sizeof(int)); // 申请一维数组空间
if (array == NULL) {
printf("Failed to allocate memory.");
return -1;
}
...
free(array); // 释放一维数组空间