VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:977回复:6

realloc分配的内存,万一………………

楼主#
更多 发布于:2002-12-03 14:06
万一分配的内存地址变了,是不是原来的内存里的东西都没了?如果没变当然无所谓,但要是变了呢?
我看MSDN里说的,意思就是原来的都没了,那还有啥用?
我以前从不敢用realloc这样的东西,现在有这需求。

[编辑 -  12/3/02 by  VanCheer]
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-03 16:26
后面有个参数,可以决定是否改变以前的内容
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-03 15:43
变化的概率应该很大
shyeagle
驱动老牛
驱动老牛
  • 注册日期2002-04-30
  • 最后登录2007-07-31
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-03 14:48
我又看了一下MSDN,没有明确说内容是否也拷贝过去了,不过我想,如果系统不太愚蠢,应该是在重新分配的同时把内容也拷过去,至少如果是我做这个函数,我就会这样做的。你试试吧。
[url=http://www.01study.com]01空间网[/url] [url=http://www.01study.com/forum/dispbbs.asp?boardID=73&ID=193&skin=0]版主招募[/url] [img]http://shy2003.vip.sina.com/map/yjs.gif[/img]
shyeagle
驱动老牛
驱动老牛
  • 注册日期2002-04-30
  • 最后登录2007-07-31
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-03 14:42
我也没试过这个问题,不过realloc尽管释放了以前的内存空间,但是你还是知道它的地址,而且如果你没有做其它的操作,原来内存块中的内容并没有被破坏,只是空间被释放了而已。
例:
BYTE *oldbuffer=(BYTE *)malloc(400);
........
BYTE *newbuffer=(BYTE *)realloc(oldbuffer,1000);
这时,oldbuffer空间被释放,但oldbuffer的值此时还未变,以oldbuffer的值为起始地址的内存空间中的内容也未改变,你仍然可以将oldbuffer中的400个单元的内容拷贝到newbuffer中。
另外,在多数情况下,如果空间够用,实际上newbuffer==oldbuffer.

[url=http://www.01study.com]01空间网[/url] [url=http://www.01study.com/forum/dispbbs.asp?boardID=73&ID=193&skin=0]版主招募[/url] [img]http://shy2003.vip.sina.com/map/yjs.gif[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-03 14:27
应该是变了,除非你把原来的内容拷过去了。

最大的问题是原来的内存已经被realloc释放了,没了。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
shyeagle
驱动老牛
驱动老牛
  • 注册日期2002-04-30
  • 最后登录2007-07-31
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-03 14:20
应该是变了,除非你把原来的内容拷过去了。
[url=http://www.01study.com]01空间网[/url] [url=http://www.01study.com/forum/dispbbs.asp?boardID=73&ID=193&skin=0]版主招募[/url] [img]http://shy2003.vip.sina.com/map/yjs.gif[/img]
游客

返回顶部