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原先所指向的内存地址丢失。

最新文章

  1. java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE
  2. i7 4790 z97-ar ssd 固态硬盘 装机的一些经历
  3. linux 下运行多个tomcat
  4. Linux文本比较-diff&awk
  5. 【WinForm】使用NSIS发布程序
  6. ueditor爬坑
  7. python Redis
  8. Python简介之探观止矣
  9. 获取搜索结果的真实URL、描述、标题
  10. Java多线程之静态代理
  11. redis的一些修改
  12. Android动画曲线库AndroidEasingFunctions
  13. ios 第4天
  14. shell 批量计算MD5值
  15. nginx基于目录的映射:
  16. JSP指令(page include taglib)
  17. BZOJ3530:[SDOI2014]数数(AC自动机,数位DP)
  18. Codeforces Round #265 (Div. 2) E
  19. 20135302魏静静——Linux课程期中总结
  20. MongoDB基础命令及操作

热门文章

  1. arch+xfce4音量控制快捷键插件
  2. 查看 XML 文件
  3. TTTTTTTTTTTTT LA 2191 树状数组 稍修改
  4. Luogu P2678 跳石头
  5. YOLO_v1
  6. js控制页面每次滚动一屏,和楼梯效果
  7. Oracle生成ASH报告
  8. the path component: '/var' is world-writable
  9. 在JS中统计函数执行次数
  10. git 配置 https和ssh 免密码登录 常用操作命令