重新分配内存

收藏544

阅读733

更新时间2025-08-05

重新分配内存

如果你预留的内存空间不足,你可以重新分配它以增加其大小。

重新分配会在保留原有存储数据的同时,预留一个不同(通常更大)的内存空间。

你可以使用 realloc() 函数来改变已分配内存的大小。

realloc() 函数接受两个参数:

int *ptr2 = realloc(ptr1, size);
  • 第一个参数是指向正在调整大小的内存的指针。
  • 第二个参数指定新分配内存的大小,以字节为单位。

realloc() 函数尝试在 ptr1 处调整内存大小并返回相同的内存地址。如果它无法在当前地址调整内存大小,则会在不同的地址分配内存并返回新地址。

注意:realloc() 返回不同的内存地址时,原始地址处的内存将不再被预留,并且使用它是不安全的。完成重新分配后,最好将新指针分配给之前的变量,以避免意外使用旧指针。

实例

增加已分配内存的大小:

int *ptr1, *ptr2, size;

// 为四个整数分配内存
size = 4 * sizeof(*ptr1);
ptr1 = malloc(size);

printf("%d bytes allocated at address %p \n", size, ptr1);

// 调整内存大小以容纳六个整数
size = 6 * sizeof(*ptr1);
ptr2 = realloc(ptr1, size);

printf("%d bytes reallocated at address %p \n", size, ptr2);
运行实例 »

点击 "运行实例" 按钮查看在线实例

空指针与错误检查

如果 realloc() 函数无法分配更多内存,它将返回一个空指针。这种情况虽然不太可能发生,但在需要编写防故障代码时,值得注意。

下例通过检查空指针来验证 realloc() 是否能够调整内存大小:

实例

检查空指针:

int *ptr1, *ptr2;

// 分配内存
ptr1 = malloc(4);

// 尝试调整内存大小
ptr2 = realloc(ptr1, 8);

// 检查 realloc 是否能够调整内存大小
if (ptr2 == NULL) {
  // 如果重新分配失败
  printf("Failed. Unable to resize memory");
} else {
  // 如果重新分配成功
  printf("Success. 8 bytes reallocated at address %p \n", ptr2);
  ptr1 = ptr2; // 更新 ptr1 以指向新分配的内存
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

注意:在分配内存时,你应该始终包括错误检查(即检查指针是否为 NULL)。

注意:当你不再需要使用已分配的内存时,也应该始终释放它。这对于确保程序按预期运行至关重要,同时也有助于提高程序的可维护性和效率。

要释放内存,只需使用 free() 函数:

实例

释放已分配的内存:

// 释放已分配的内存
free(ptr1);
运行实例 »

点击 "运行实例" 按钮查看在线实例

在下一章中,你将学习更多关于如何释放已分配内存以及为什么这很重要的内容。

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

71万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号