realloc 用过很多次了。无非就是将已经存在的一块内存扩大。

char* p = malloc(1024);

char* q = realloc(p,2048);

现在的问题是我们应该如何处理指针 p。 刚开始按照我最直观的理解,如果就是直接将 p = NULL;。 到最后只需要释放 q的空间就可以了。

因为最近在做个封装。结果在做单元测试的时候发现。有时候我在 free(q); 的时候会出错。这样我就郁闷了。

后来仔细一跟踪,发现 realloc 完以后 q 和 p 的指针地址是一样。不过有时候又不一样。

仔细查了下资料。得到如下信息:

1.如果 当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。 这个时候 q 和 p 指向的地址是一样的。

2.如果 当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p指向的内容 copy到 q,返回 q。并将p所指向的内存空间删除。

这样也就是说 realloc 有时候会产生一个新的内存地址 有的时候不会。所以在分配完成后。我们需要判断下 p 是否等于 q。并做相应的处理。

这里有点要注意的是要避免 p = realloc(p,2048); 这种写法。有可能会造成 realloc 分配失败后,p原先所指向的内存地址丢失。

realloc函_realloc函数用法相关推荐

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

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

  2. realloc函_realloc函数使用规则

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. realloc函数使用规则如下: 1.realloc失败的时候,返回NULL: 2.realloc失败的时候,原来的内存不改变,不 ...

  3. realloc函_realloc(重新分配内存空间的函数)

    在头文件中定义void * realloc(void * ptr,size_t new_size); 重新分配给定的内存区域.它必须预先分配malloc(),calloc()或realloc()尚未释 ...

  4. realloc函数用法解释

    realloc函数是将数组扩容的一个函数 用法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小). 具体工作方法: 假设有一个p指针指向一个数组空间,如下图所示 想在想要使这个 ...

  5. php中 param,php中bind_param()函数用法分析

    本文实例讲述了php中bind_param()函数用法.分享给大家供大家参考,具体如下: 从字面上不难理解,绑定的参数:下面我通过一个绑定参数的例子讲一下: for example: bind_par ...

  6. python中的get函数_python之函数用法get()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法get() #http://www.runoob.com/python/att-dic ...

  7. c语言字符串strchr,C语言 strchr 函数用法

    C语言 strchr 函数用法 C语言中strchr函数作用是为在一个串中查找给定字符的第一个匹配之处,该函的原型为"char *strchr(const char *str, int c) ...

  8. c语言count函数的用法,java count函数用法

    java count函数用法 [2021-02-11 06:55:28]  简介: 在excel中count函数的功能是:计算数字的个数,对给定数据集合或者单元格区域中数据的个数进行计数.COUNT函 ...

  9. strstr函数php,strstr 函数用法

    strstr strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL. C语言函数 函数名: s ...

最新文章

  1. iOS各平台直播SDK收费明细
  2. Linq to SQL只支持SQL Server(所选对象使用不支持的数据提供程序)
  3. Python项目可以有多大?最多可以有多少行代码?
  4. ssl2340-格子游戏【并查集】
  5. centos7硬盘分区
  6. 微信上线红包新玩法,今年春节可以“当面”给红包了!
  7. 一个内核调试函数的实现
  8. 仅用 10 天设计的 JavaScript,凭什么成为程序员最受欢迎的编程语言?
  9. Google Flutter 一统移动、Web、桌面、嵌入式江湖!
  10. [swift] LeetCode 20. Valid Parentheses
  11. html5初探ppt,HTML5---HTML5初探151019讲义.ppt
  12. video.js使用方法
  13. codeblocks13.12汉化
  14. android 4.4新功能介绍(Kitkat)
  15. 2022百度大数据开发工程师实习面试经历
  16. 奇迹mu选区后就一直显示连接服务器,奇迹mu双开
  17. canvas教程13-使用图片
  18. DevOps有“政治倾向性”
  19. 如何用源生js做出淘宝放大镜效果?
  20. C# 用QQ企业邮箱发邮件

热门文章

  1. 做网络推广 你必须知道这25条专业词
  2. 招聘JD,机会多多环境骚扰
  3. 生物课高中神经调节视频,初中生物神经系统视频
  4. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(二)-webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
  5. android usb单反相机,在Android应用程序上使用USB Camera
  6. 全国计算机一级photoshop模拟试题,计算机一级photoshop模拟试题练习「附答案」
  7. 【C语言】printf函数参数压栈问题
  8. 封装el-dialog 注意子组件参数变化
  9. Acrobat could not access the recognition service, Acrobat无法使用识别服务
  10. Homebrew详解