c语言 动态内存分配
时间: 2024-11-10 14:13:03 浏览: 11
C语言 动态内存分配详解
在C语言中,动态内存分配是指程序在运行时根据需要向系统请求内存空间的过程,而不是在编译阶段就确定好内存大小。这主要通过两个标准库函数`malloc()`和`calloc()`来完成:
1. `malloc(size_t size)`:用于申请指定大小`size`的字节,并返回一个指向所分配内存的指针。如果分配失败,返回`NULL`。
示例:
```c
int* ptr = malloc(sizeof(int)); // 分配一个int类型的内存
if (ptr != NULL) {
*ptr = 42; // 使用指针存储数据
free(ptr); // 使用free释放内存
} else {
printf("Memory allocation failed.\n");
}
```
2. `calloc(size_t num, size_t size_per_item)`:不仅分配指定数量`num`的元素所需的空间,还会初始化所有元素为零。返回值同`malloc()`。
示例:
```c
char* str = calloc(5, sizeof(char)); // 分配可以存放5个字符的内存,并初始化为0
if (str) {
str[0] = 'H'; str[1] = 'e'; // 字符串初始化
// ...
free(str);
}
```
3. `realloc(void* ptr, size_t new_size)`:已分配内存的动态调整大小,如果成功,会返回新的指针;如果不够,可能会失败并返回`NULL`。
4. `free(void* ptr)`:释放先前由`malloc()`、`calloc()`或`realloc()`分配的内存,防止内存泄漏。
阅读全文