【realloc函数】在C语言中,`realloc`函数是一个非常重要的内存管理工具,用于动态调整已分配内存块的大小。它可以在不丢失原有数据的前提下,扩展或缩小内存块的大小,从而提高程序的灵活性和效率。
一、总结
`realloc`函数是C语言标准库中的一个函数,定义在`
该函数的基本语法如下:
```c
void realloc(void ptr, size_t new_size);
```
- `ptr`:指向之前分配的内存块的指针。
- `new_size`:希望调整后的内存块大小(单位为字节)。
如果`realloc`成功,返回新的内存块指针;如果失败,则返回`NULL`,并且原来的内存块不会被释放。
二、表格对比
| 特性 | 描述 |
| 函数名 | `realloc` |
| 所属头文件 | ` |
| 功能 | 重新分配已分配的内存块 |
| 参数 | `void ptr`(原指针),`size_t new_size`(新大小) |
| 返回值 | 成功时返回新内存地址,失败返回`NULL` |
| 是否保留原数据 | 是,除非新大小小于原大小 |
| 原始内存是否释放 | 如果失败,原始内存未被释放 |
| 使用场景 | 需要动态调整内存大小时(如数组扩容) |
三、使用注意事项
1. 不能对空指针调用`realloc`:如果`ptr`为`NULL`,则`realloc`的行为等同于`malloc`。
2. 释放前必须确保指针有效:使用完`realloc`后,应确保不再使用旧指针。
3. 注意内存泄漏:如果`realloc`失败,应保留原指针,防止数据丢失。
4. 不要多次释放同一块内存:使用`realloc`后,旧指针可能失效,应避免重复释放。
四、示例代码
```c
include
include
int main() {
int arr = (int )malloc(5 sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
// 重新分配内存,扩展到10个整数
arr = (int )realloc(arr, 10 sizeof(int));
if (arr == NULL) {
printf("Memory reallocation failed.\n");
return 1;
}
for (int i = 5; i < 10; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
```
五、总结
`realloc`函数是C语言中处理动态内存的重要工具,能够灵活地调整内存块大小,适用于需要动态增长或缩小数据结构的场景。合理使用`realloc`可以提升程序性能,但也需注意其潜在的风险,如内存泄漏和指针无效等问题。


