真正认识 realloc 的工作方式。
Posted on 2008-11-20 13:12 啊夏 阅读(3563) 评论(1) 编辑 收藏
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原先所指向的内存地址丢失。
[url] http://www.cnblogs.com/ren54/archive/2008/11/20/1337545.html[/url]
分享到:
相关推荐
realloc函数的使用在数据结构中十分重要,本文给出了使用的例子和使用的具体说明
C中堆管理—浅谈malloc,calloc,realloc 函数之间的区别 详情:http://blog.csdn.net/fjb2080
realloc原型是extern void *realloc(void *mem_address, unsigned int newsize); 函数说明 语法 指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。 新的大小可大可小(但是要注意,如果...
实现内存管理函数,包括malloc、free、realloc等函数的实现
就是配套我一篇博客讲解的资源,因为我截图可能不是特别清楚,所以我就将这个图上传上来了。是采用Visio画的。
realloc_test
数据结构顺序表 C语言代码实现以及realloc的使用
个人总结各类博客和资料里关于malloc,calloc,realloc的对比
C语言函数realloc.doc
以下是对c语言中的malloc函数,realloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下
采用FOR90语言编制的实现类似Delphi中Setlength的动态数组扩展功能。原有的FORTRAN90的动态数组在扩展时首先需要释放掉原有空间,即原有数据不能得以保存,而SetLength(A,N)则将A的长度动态设定为N,而保持原有数据...
在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。在执行完该函数后,存储参数和本地变量的内存空间会释放。...
作者:陶宁,华清远见嵌入式学院讲师。 相关函数原型: 1.... 作 用: Malloc用于动态申请存储空间,它不是关键字,而是一个申请内存的函数 ... 3.realloc 作 用:重新分配内存空间。 例 子:
c代码-c语言realloc函数
C语言函数realloc.rar