構造体s1の配列(ヒープ上)へのポインタp1を持ち、各構造体s1にも(ヒープ上の)別の構造体s2へのポインタがあるとします。サイズを変更するためにp1にrealloc()を呼び出すと、事前再割り当てされた配列の構造体によって保持されていた古いメモリが解放されます(ヒープ上のs2s)。realloc()は古いメモリを解放します(古いメモリが他のメモリへのポインタである場合)?
ドキュメントにはif the area pointed to was moved, a free(ptr) is done
と記載されているので、この質問に対する答えは1つのレベルまでしか解放されないことを意味します。あれは正しいですか?もしそうなら、最良の解決法は、新しい配列を手動でmallocし、古い配列を繰り返し、新しい大きな配列に値をコピーし、構造体を解放することです。
'free()'は、ポインターがどのオブジェクトを指しているのかわかりません。その結果、自動的にあなたの構造体のポインタを再帰的に 'free()'することはできません。 – EOF
あなたの質問は困惑のようなものです。あなたがブロック*を大きくしようとしているのであれば、おそらくより小さなブロックを除いて何も自由にする必要はありますか?あなたがブロックを小さくしようとしているのであれば、疑問があります。 –
@DavidSchwartz私はサイズを変更する言葉を修正しました。私は最初に拡大を書いていました。古い要素を新しい場所にコピーしても古い要素を解放しない場合があると思ったからです。しかし、振り返ってみると、これは事実ではないと思いますか? – gowrath