在头文件中定义void * realloc(void * ptr,size_t new_size);

重新分配给定的内存区域。它必须预先分配malloc(),calloc()或realloc()尚未释放与free或呼叫realloc。否则,结果是不确定的。

重新分配由以下两者之一完成:

a)ptr如有可能,扩大或缩小指定的现有地区。该地区的内容保持不变,直至新旧尺寸中的较小者。如果区域展开,则数组新部分的内容未定义。

b)分配一个大小为new_size字节的新内存块,复制大小等于新旧大小较小者的内存区域,并释放旧块。

如果没有足够的内存,则旧的内存块不会被释放,并返回空指针。

如果ptr是NULL,则行为与调用malloc(new_size)相同。

如果new_size为零,则行为是实现定义的(可能会返回空指针(在这种情况下,可能会释放或不释放旧的内存块),或者可能会返回一些可能不用于访问存储的非空指针)。

realloc是线程安全的:它的行为就像访问通过其参数可见的内存位置,而不是任何静态存储。先前调用free或realloc来释放内存区域的同步 - 调用任何分配函数,包括分配相同或部分同一区域内存的realloc。在通过释放函数访问内存之后以及在通过重新分配访问内存之前,会发生此同步。所有分配和解除分配功能在内存的每个特定区域都有一个总的顺序。(自C11以来)

参数

PTR-指向要重新分配的内存区域的指针new_size-数组的新大小

返回值

成功时,将指针返回到新分配的内存的开始位置。返回的指针必须用free()或来解除分配realloc()。原始指针ptr无效,并且对它的任何访问都是未定义的行为(即使重新分配就地)。

失败时,返回一个空指针。原始指针ptr仍然有效,可能需要使用free()or 取消分配realloc()。

注释

从C11 DR 400开始不支持零大小。

最初(在C89中),增加了对零大小的支持以适应如下代码。

OBJ *p = calloc(0, sizeof(OBJ)); // "zero-length" placeholder...while(1) {

p = realloc(p, c * sizeof(OBJ)); // reallocations until size settles    ... // code that may change c or break out of loop}

#include #include

int main(void){

int *pa = malloc(10 * sizeof *pa); // allocate an array of 10 int    if(pa) {        printf("%zu bytes allocated. Storing ints: ", 10*sizeof(int));        for(int n = 0; n

int *pb = realloc(pa, 1000000 * sizeof *pb); // reallocate array to a larger size    if(pb) {        printf("\n%zu bytes allocated, first 10 ints are: ", 1000000*sizeof(int));        for(int n = 0; n

输出:

40 bytes allocated. Storing ints: 0 1 2 3 4 5 6 7 8 94000000 bytes allocated, first 10 ints are: 0 1 2 3 4 5 6 7 8 9

参考

C11标准(ISO / IEC 9899:2011):7.22.3.5 realloc函数(p:349)

C99标准(ISO / IEC 9899:1999):7.20.3.4 realloc函数(p:314)

C89 / C90标准(ISO / IEC 9899:1990):4.10.3.4 realloc函数

realloc函_realloc(重新分配内存空间的函数)相关推荐

  1. c语言分配内存空间方法,C语言之动态分配内存空间

    动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...

  2. realloc函_realloc 函数的用法 以及 误区

    realloc 原型:extern void *realloc(void *mem_address, unsigned int newsize); 用法:#include 有些编译器须要#includ ...

  3. c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题

    在动态分配的空间中如何输入字符串,关于C语言动态给字符串分配内存空间的问题相信很多朋友都不太了解,下面维维带来相关解答,赶紧看看吧. 用malloc来分配内存空间. 即输入几个字节的字符 系统就自动帮 ...

  4. C语言calloc()函数:分配内存空间并初始化

    http://c.biancheng.net/cpp/html/134.html 头文件:#include <stdlib.h> calloc() 函数用来动态地分配内存空间并初始化为 0 ...

  5. alloc_page分配内存空间--Linux内存管理(十七)

    1 前景回顾 在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Know ...

  6. java分配数组空间使用的关键字_创建数组时为数组元素分配内存空间的 Java 关键字是________(5.0分)_学小易找答案...

    [填空题]若已有数组说明"char s[];",则创建 20 个字符的数组的语句是s=______________; (5.0分) [单选题]下列关于数组的描述错误的是(3.0分) ...

  7. matlab 运行报错:变量似乎随迭代次数而改变,请预先分配内存空间以加快运算速度 解决方式

    目录 一.问题分析 报错信息翻译: 二.问题分析 1.官方文档分析 三.扩展实验 实验1 实验2 一.问题分析 首先查看报错信息: 报错信息翻译: 指示的变量或数组的大小似乎随着每次循环迭代而改变. ...

  8. C语言——动态开辟内存空间的函数

    目录 为什么需要动态开辟内存空间? 1.malloc函数 2.free函数 3.calloc函数 4.realloc 为什么需要动态开辟内存空间? 我们已经熟悉了基本的内存开辟方法: int a = ...

  9. realloc函_realloc函数用法

    realloc 用过很多次了.无非就是将已经存在的一块内存扩大. char* p = malloc(1024); char* q = realloc(p,2048); 现在的问题是我们应该如何处理指针 ...

最新文章

  1. python模块--Beautifulsoup
  2. GDAL算法进度条使用说明
  3. 将gitLab 上的dev分支拉取到本地
  4. php4和php5的区别,什么是PHP 4和PHP 5之间的区别是什么-php是什么文件
  5. 【Flink】 Flink与Kafka版本对应关系
  6. “Replit 威胁我,要求我关闭我的开源项目!”
  7. Educoder Basemap和Seaborn 第一关:Seaborn
  8. Android BackgroundViewPager:类似桌面背景壁纸随手指滑动
  9. 计算机科学导论:第六章 计算机网络和因特网
  10. Linux中的远程连接
  11. UVA - 1589 Xiangqi (象棋)
  12. 新起点,新希望,为梦想而战!!!
  13. 关系规范化之满足第三范式3NF的函数依赖保持分解算法
  14. 计算机毕业设计ssm+vue基本微信小程序的快递柜管理系统 uniapp 小程序
  15. ddr5内存上市时间_DDR5内存何时能普及,及价格稳定下来?
  16. e盘不见了怎么恢复?可以这样找回!
  17. originos和鸿蒙系统的区别,originos是什么系统_originos和安卓有什么区别
  18. 导致cannot access memory的原因是什么?
  19. 九宫格——用html+css制作一个网页
  20. python检测屏幕亮点_图像处理之坏点校正及源码实现

热门文章

  1. 《2019~2020网络安全态势观察报告》重磅发布!
  2. 一行代码引来的安全漏洞,就让我们丢失了整个服务器的控制权
  3. 怒肝 8 个月源码,我成为了 Spring 开源贡献者
  4. 阿里技术专家告诉你,如何画出优秀的架构图?
  5. 百度现场面试:JVM+算法+Redis+数据库!(三面)| CSDN博文精选
  6. 填补服务机器人市场空白,九号机器人提供智能服务场景解决方案!
  7. 400位京东技术专家心血之作 《决战618:探秘京东技术取胜之道》重磅发售!
  8. var let const 区别
  9. java is start_PHP IntlChar::isJavaIDStart()用法及代码示例
  10. python动态类型的坑_python进阶教程之动态类型详解