realloc时如果当前内存的后续有空闲,就只是扩充一下,不会改变地址,这样效率最高。只有在后续被占用了,不够扩充时才会重新分配一个足够的空间,并复制之前的内容过去,此时返回的地址就变了。
你这个例子里,上下两部分不对称了,下面始终用new,上面却是realloc。如果上面也是跟new对应的malloc,就不会发生问题。
【 在 njer 的大作中提到: 】
: 这个就是最终导致我没反应过来的地方。
: 因为new方式下不会出现newptr == b_str_的情况,所以没有else下面的也没关系。
: 而realloc下的是会有这种情况出现的,当时我写的时候脑袋也是有这个概念的,后来就忘了,然后再写了new char方式后,眼睛就总在两处做对比,总觉得没什么问题,但死活就是不行,脑袋就一直没反应过来realloc下是会有newptr == b_str_的情况出现的。。
: ...................
--
FROM 223.104.165.*