realloc也是在堆中开辟空间,但与普通的开辟空间不同。它用来扩大已经开辟好的空间。
用法为:
void *realloc(*mem_addr,unsigned int newsize)
含义是:(数据类型*)realloc(要扩大内存的指针名,新的内存大小)
这里有2种情况:
1、够开辟新的newsize,即mem_addr开始的空闲内存不小于newsize,则返回mem_addr。
2、不够开辟的newsize,即mem_addr开始的空闲内存小于newsize,则会换一个新的地方重新开辟newsize大小的内存,并将mem_addr处开始的数据自动拷贝到新的地址,mem_addr开始的原来的内存也自动释放掉,不用手动free。返回新的首地址。
关于返回值:
1、如果参数mem_addr=NULL,则realloc与malloc一样,开辟newsize大小的空间,返回开辟的内存地址。
2、如果参数newsize=0,则释放掉原内存空间,相当于free,返回NULL。
3、“扩大”成功,返回mem_addr。
4、不能再原地址扩大的,“重新开辟”成功,返回新的内存地址。
5、“扩大”与“重新开辟”都不成功,则返回NULL,原内存不变。
634

被折叠的 条评论
为什么被折叠?



