阅读:976回复:6
realloc分配的内存,万一………………
万一分配的内存地址变了,是不是原来的内存里的东西都没了?如果没变当然无所谓,但要是变了呢?
我看MSDN里说的,意思就是原来的都没了,那还有啥用? 我以前从不敢用realloc这样的东西,现在有这需求。 [编辑 - 12/3/02 by VanCheer] |
|
|
沙发#
发布于:2002-12-03 14:20
应该是变了,除非你把原来的内容拷过去了。
|
|
|
板凳#
发布于:2002-12-03 14:27
应该是变了,除非你把原来的内容拷过去了。 最大的问题是原来的内存已经被realloc释放了,没了。 |
|
|
地板#
发布于: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. |
|
|
地下室#
发布于:2002-12-03 14:48
我又看了一下MSDN,没有明确说内容是否也拷贝过去了,不过我想,如果系统不太愚蠢,应该是在重新分配的同时把内容也拷过去,至少如果是我做这个函数,我就会这样做的。你试试吧。
|
|
|
5楼#
发布于:2002-12-03 15:43
变化的概率应该很大
|
|
6楼#
发布于:2002-12-03 16:26
后面有个参数,可以决定是否改变以前的内容
|
|
|