在C语言编程中,动态内存管理是一个非常重要的概念。当我们不知道程序运行时需要多少内存时,就需要在运行时动态地申请和释放内存。malloc、calloc、free 和 realloc 是 C 标准库中用于动态内存管理的核心函数。本文将重点讲解 C语言realloc函数 的使用方法,帮助初学者轻松掌握这一关键技能。
realloc 是 “reallocate”(重新分配)的缩写。它的作用是调整已分配内存块的大小。你可以用它来扩大或缩小一块已经通过 malloc、calloc 或之前的 realloc 分配的内存。
函数原型如下:
void *realloc(void *ptr, size_t size);
ptr:指向之前分配的内存块的指针。如果为 NULL,则 realloc 的行为等同于 malloc(size)。size:新的内存大小(以字节为单位)。NULL,且原内存块保持不变。当你调用 realloc 时,系统会尝试在原内存块后面扩展空间。如果无法扩展(例如后面已被占用),系统会在别处分配一块新内存,将原数据复制过去,并自动释放原内存。
⚠️ 重要提示:永远不要直接将 realloc 的返回值赋给原指针!因为如果分配失败,返回 NULL,会导致原指针丢失,造成内存泄漏。
下面是一个安全使用 realloc 的完整例子:
#include <stdio.h>#include <stdlib.h>int main() { int *arr = (int*)malloc(5 * sizeof(int)); if (arr == NULL) { printf("内存分配失败!\n"); return 1; } // 初始化数组 for (int i = 0; i < 5; i++) { arr[i] = i + 1; } // 打印原始数组 printf("原始数组: "); for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); } printf("\n"); // 使用临时指针安全地 realloc int *temp = (int*)realloc(arr, 10 * sizeof(int)); if (temp == NULL) { // realloc 失败,释放原内存并退出 free(arr); printf("内存重分配失败!\n"); return 1; } arr = temp; // 更新指针 // 继续初始化新增部分 for (int i = 5; i < 10; i++) { arr[i] = i + 1; } // 打印扩容后的数组 printf("扩容后数组: "); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); free(arr); // 释放内存 return 0;}
ptr = realloc(ptr, newSize); 是危险的!应使用临时指针。realloc 是否返回 NULL。realloc 成功,原指针就不再有效,不要再使用它。size 为 0 且 ptr 不为 NULL,则相当于调用 free(ptr),返回 NULL。C语言realloc函数 是实现灵活内存管理的强大工具,特别适用于需要动态调整数据结构大小的场景(如动态数组、字符串拼接等)。掌握 realloc内存管理 和 C语言动态内存分配 技巧,能让你写出更高效、更安全的 C 程序。
记住:安全第一!始终使用临时指针、检查返回值、及时释放内存。希望这篇 realloc使用教程 能帮助你轻松入门动态内存重分配。
祝你编程愉快!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128444.html