+ -
当前位置:首页 → 问答吧 → 新手,关于realloc函数的问题

新手,关于realloc函数的问题

时间:2011-12-22

来源:互联网

本人初学c,看到realloc()函数时,书上的说明是第二个参数的值不应超过以前分配的字节数。但前几天有人和我说第二个参数的值一定要超过以前分配的字节数。
  新手不太明白,还请各位高手指点。

作者: gbwzycg   发布时间: 2011-12-22

原型:extern void *realloc(void *mem_address, unsigned int newsize);
  语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小不然的话会导致数据丢失!

作者: yafeng_jiang   发布时间: 2011-12-22

这种事可以google的~

作者: yafeng_jiang   发布时间: 2011-12-22

第二个参数可大可小,但是如果比以前的小,就会导致以前的数据丢失,所以一般要设成比原来的大。

作者: arcrong_c   发布时间: 2011-12-22

引用 1 楼 yafeng_jiang 的回复:

原型:extern void *realloc(void *mem_address, unsigned int newsize);
语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小不然的话会导致数据丢失!

那如果作为第一个参数的指针在之前已经释放过内存了,或者是一个指向NULL的指针,这样用realloc函数会有问题吗

作者: gbwzycg   发布时间: 2011-12-22

可大可小,没有规定的!看你有什么目的了,扩大容量还是缩小容量!

作者: woweiwokuang0000   发布时间: 2011-12-22

引用 5 楼 woweiwokuang0000 的回复:
可大可小,没有规定的!看你有什么目的了,扩大容量还是缩小容量!


正解

作者: lijy520   发布时间: 2011-12-22

引用 5 楼 woweiwokuang0000 的回复:
可大可小,没有规定的!看你有什么目的了,扩大容量还是缩小容量!

++

除非你看的特殊版本

作者: AnYidan   发布时间: 2011-12-22

char* p = malloc(1024);
char* q = realloc(p,2048);

1.如果 当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。 这个时候 q 和 p 指向的地址是一样的。
2.如果 当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p指向的内容 copy到 q,返回 q。并将p所指向的内存空间删除。

作者: youkuxiaobin   发布时间: 2011-12-22