假设我有一个指向结构s1的数组(在堆上)的指针p1,其中每个结构s1也有一个指向另一个结构s2(在堆上)的指针。如果我在p1上调用realloc()来调整它的大小,那么将释放pre-realloced数组的结构中的旧内存(堆中的s2)?realloc()释放旧内存(旧内存可能是指向其他内存的指针)?
我相当肯定的答案,这个问题是没有,因为文档指出if the area pointed to was moved, a free(ptr) is done
这意味着它只能腾出一个级别深度。那是对的吗?如果是这样,最好的解决方案是手动malloc一个新的数组,迭代旧的数组,将值复制到新的更大的数组,并释放结构时,它?
'free()'不知道它指向的指针是什么类型的对象。因此,它*无法自动递归地在结构中free()'指针。 – EOF
你的问题有点令人费解。如果你想让块越大,为什么你需要释放除小块之外的任何东西?这个问题是有道理的,如果你想让这个块更小。 –
@DavidSchwartz我已修复措辞来调整大小。我最初写的是放大的,因为我认为可能有些情况下,将旧元素复制到新的地方不会释放旧元素。但是,现在回想起来,我认为情况并非如此? – gowrath