0

http://www.c.happycodings.com/Data_Structures/code9.htmlにあるWebで見つけたコードについていくつか質問があります。

  1. strarrayが次のように定義されているのはなぜ**ですか?
  2. 最初malloc()に配列を作成し、次にmalloc()その各要素を作成する必要がありますか?

    strarray = (struct node **)realloc(strarray, (count + 1) * sizeof(struct node *));

    strarray[count] = (struct node *)malloc(sizeof(struct node));

  3. この配列を完全にfree()する方法は?

ありがとう

4

2 に答える 2

2
  1. strarray、各ポインターがノード構造体を指すポインターの配列へのポインターです。これは、オブジェクトの配列の基本的な表現です。基本型の場合は*、基本型の配列へのポインターであるため、使用できるのは 1 つだけです。構造体に対してもそれを行うことができます。それは、配列で何をしたいかによって異なります。

  2. はい、そうです。

  3. 最初に配列を繰り返し処理し、すべてのメンバーを解放してから、配列を解放します。解放の手がかり: 割り当てたものをすべて解放します。

于 2012-09-13T07:41:14.400 に答える
1
  1. strarraystruct node **動的に割り当てられた配列であるため、タイプですstruct node *-つまり。各要素が を指すポインターの配列struct node

  2. いいえ、達成しようとしていることに応じて、単にメモリのブロックを割り当てて X を保持しstruct node、そのポインターを に割り当てることができますstruct node *。そのコードを書いた人は、ポインタの配列にmallocメモリを割り当てました。これが、各個人にメモリを割り当てるために を呼び出した理由struct nodeです。

    動的に割り当てられた へのポインターの動的配列を使用する可能性はstruct node、連続した単一のブロックを単に割り当てるのではなく、struct nodeを呼び出すときに (必要な場合) 配列全体をコピーするコストを削減することに関係している可能性がありますrealloc

  3. メモリを解放するには、逆のことを行います。配列内の各要素を解放してから、配列全体を解放します。

于 2012-09-13T07:46:06.153 に答える