4

私が書いているプログラムでは、バイナリ ツリーとリンク リスト構造を実装しています。必要なノードの数がわからないので、それらをヒープに置き、より多くのスペースが必要な場合はプログラムに realloc() を使用させます。

問題は、そのような構造には同じ構造内の他の場所へのポインターが含まれていることです。realloc() が構造を移動するため、これらすべてのポインターをやり直す必要があります (オフセットに変更しない限り、コードの複雑さが増し、再割り当てよりもはるかに一般的な、構造を使用するコスト)。

さて、これは問題ではないかもしれません。古いポインターを取得して、新しいポインターから減算し、変更する必要がある各ポインターに結果を追加するだけです。ただし、これは、2 つのポインターを減算してそれらのアドレスの差を取得できる場合にのみ機能します (次に、その差を別のポインターに加算して、そのバイト数先のポインターを取得します)。私はヒープで作業しているため、アドレスの差がエントリのサイズで割り切れるとは保証できません。そのため、通常のポインタ減算 (その間のオブジェクトの数が得られます) ではエラーが発生します。では、どうすればバイト単位で違いが得られ、ヒープの 2 つの異なるセクションにある場合でも機能するのでしょうか?

4

3 に答える 3

0

実際、mallocまたはcallocを使用して、各ノードのメモリを取得できます。

したがって、ツリーのルート ノードのアドレスを覚えておくだけで済みます。

reallocこのように、ツリー全体のメモリは必要ありません。各ノードのアドレスも変更されません。:)

于 2013-08-07T22:26:01.147 に答える