realloc()会造成内存泄露吗

goodboy5201314 2009-12-09 10:42:01
我们都知道,realloc()函数在当分配内存空间不够的时候,会另外开出一块足够大的内存空间来,然后把之前那空间的值复制过去。我想问的是那之前那空间是自动free掉了呢?还是被泄露了?MSDN上好像没说清楚。
...全文
693 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
laozhong110 2009-12-11
  • 打赏
  • 举报
回复
有可能泄露
void * p;
p = realloc(p,...);
这种情况,p有旧内存空间,当它重新分配不到新的内存时,会返回NULL,记得好像有好几中情况.
z569362161 2009-12-11
  • 打赏
  • 举报
回复
realloc()函数

从造出来就没那个功能。
飞天御剑流 2009-12-11
  • 打赏
  • 举报
回复
楼主无脑,设计一个会造成内存泄漏的标准库函数出来,岂不成了大笑话??有可能吗???
yuesheng3707 2009-12-11
  • 打赏
  • 举报
回复
buhui
alijun19886666 2009-12-10
  • 打赏
  • 举报
回复
要配套使用,个人建议用new和delete更好
Dinelgua 2009-12-09
  • 打赏
  • 举报
回复
realloc returns a void pointer to the reallocated (and possibly moved) memory block. The return value is NULL if the size is zero and the buffer argument is not NULL, or if there is not enough available memory to expand the block to the given size. In the first case, the original block is freed. In the second, the original block is unchanged. The return value points to a storage space that is guaranteed to be suitably aligned for storage of any type of object. To get a pointer to a type other than void, use a type cast on the return value.

Remarks
loveour 2009-12-09
  • 打赏
  • 举报
回复
当然不需要担心,否则这个函数不就没用了吗...
selooloo 2009-12-09
  • 打赏
  • 举报
回复
这个不需要LZ操心,你要关心的是realloc()函数重新分配空间后,指针的变化
比如
p=malloc();q=p;
p=realloc();如果函数重新分配空间后,指针q的操作就变成非法了,因为q依然指向以前的内存,如果realloc();会造成内存泄露,那指针q的操作就依然合法;

即使C语言允许,OS也不会允许 realloc()买一送一的行为的
kondykuang 2009-12-09
  • 打赏
  • 举报
回复
不会,它只是在原有空间上 扩展需要的空间处理。
操作系统会自动纪录这个指针上有多少内存是你申请的。
shuiqin 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengxn 的回复:]
保证释放最后1次realloc()返回的指针就可以了。

realloc()如果成功回返回成功的地址,注意可能和旧地址已经不同了。
如果失败返回NULL,这个时候旧地址依旧可用,请注意旧地址不要被NULL覆盖了。
[/Quote]
楼上说得好!!
pengxn 2009-12-09
  • 打赏
  • 举报
回复
保证释放最后1次realloc()返回的指针就可以了。

realloc()如果成功回返回成功的地址,注意可能和旧地址已经不同了。
如果失败返回NULL,这个时候旧地址依旧可用,请注意旧地址不要被NULL覆盖了。
zhangwenlang 2009-12-09
  • 打赏
  • 举报
回复
不会吧
mstlq 2009-12-09
  • 打赏
  • 举报
回复
不会泄漏,请放心使用……
jackyjkchen 2009-12-09
  • 打赏
  • 举报
回复
不会
苍蝇①号 2009-12-09
  • 打赏
  • 举报
回复
存在了这么多年都没问题,lz尽管放心使用
z569362161 2009-12-09
  • 打赏
  • 举报
回复
不会了,
niu05500230 2009-12-09
  • 打赏
  • 举报
回复
relloc函数是先分配指定空间的大小,然后将原空间中数据copy到刚分配空间,再将原来空间free掉,所以relloc不会引起内存泄漏,但是重新分配之后内存指针就变了,重新分配的空间可以比原来大,也可以比原来的空间小

69,772

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧