malloc
函数:
-
作用:
malloc
函数用于分配指定字节数的内存空间,并返回一个指向这块内存空间的指针。分配的内存空间是未初始化的,即其中的内容是未定义的。 -
原型:
void* malloc(size_t size);
-
参数:
size
参数指定了要分配的字节数。 -
返回值:如果分配成功,返回一个指向分配的内存空间的指针;如果分配失败,返回
NULL
。 -
具体应用实例(来源于ai,已经进行过测试)
-
#include <stdio.h> #include <stdlib.h> int main() { int n = 5; // 要分配的整数数量 int *array = (int *)malloc(n * sizeof(int)); // 分配内存 // 检查内存是否成功分配 if (array == NULL) { fprintf(stderr, "Memory allocation failed\n"); return 1; // 分配失败,退出程序 } // 初始化数组并打印其内容 for (int i = 0; i < n; i++) { array[i] = i * 2; } printf("Array contents:\n"); for (int i = 0; i < n; i++) { printf("%d ", array[i]); } printf("\n"); // 使用完数组后,释放内存 free(array); array = NULL; // 防止悬挂指针 return 0; }
calloc
函数:
-
作用:
calloc
函数也用于分配内存空间,但它允许你指定要分配的元素的数量和每个元素的大小(以字节为单位),并且分配的内存空间会被初始化为零。 -
原型:
void* calloc(size_t num, size_t size);
-
参数:
num
参数指定了要分配的元素的数量,size
参数指定了每个元素的大小(以字节为单位)。 -
返回值:如果分配成功,返回一个指向分配的内存空间的指针,该空间已被初始化为零;如果分配失败,返回
NULL
。 -
具体应用实例(来源于ai,已经进行过测试)
-
#include <stdio.h> #include <stdlib.h> int main() { int n = 10; // 要分配的整数数量 int *array = (int *)calloc(n, sizeof(int)); // 分配内存并初始化为0 // 检查内存是否成功分配 if (array == NULL) { fprintf(stderr, "Memory allocation failed\n"); return 1; // 分配失败,退出程序 } // 打印数组内容(初始值应为0) printf("Array contents:\n"); for (int i = 0; i < n; i++) { printf("%d ", array[i]); } printf("\n"); // 使用完数组后,释放内存 free(array); array = NULL; // 防止悬挂指针 return 0; }
realloc
函数:
-
作用:
realloc
函数用于调整之前通过malloc
或calloc
分配的内存空间的大小。它可以增加或减少已分配内存空间的大小。 -
原型:
void* realloc(void* ptr, size_t size);
-
参数:
ptr
参数是指向之前分配的内存空间的指针,size
参数指定了新的内存空间的大小(以字节为单位)。 -
返回值:如果重新分配成功,返回一个指向新的内存空间的指针(可能与原来的地址不同);如果重新分配失败,返回
NULL
,并且原来的内存空间保持不变。 -
具体应用实例(来源于ai,已经进行过测试)
-
#include <stdio.h> #include <stdlib.h> int main() { int *array = (int *)malloc(5 * sizeof(int)); // 初始分配5个整数的内存 // 检查内存是否成功分配 if (array == NULL) { fprintf(stderr, "Memory allocation failed\n"); return 1; // 分配失败,退出程序 } // 初始化数组 for (int i = 0; i < 5; i++) { array[i] = i * 10; } // 重新分配内存以存储10个整数 int *new_array = (int *)realloc(array, 10 * sizeof(int)); // 检查内存是否成功重新分配 if (new_array == NULL) { fprintf(stderr, "Memory reallocation failed\n"); free(array); // 释放原始内存 return 1; // 重新分配失败,退出程序 } array = new_array; // 更新指针 // 初始化新分配的内存部分 for (int i = 5; i < 10; i++) { array[i] = i * 10; } // 打印数组内容 printf("Array contents:\n"); for (int i = 0; i < 10; i++) { printf("%d ", array[i]); } printf("\n"); // 使用完数组后,释放内存 free(array); array = NULL; // 防止悬挂指针 return 0; }