最初のコードは正しくないと思います。「不完全要素型」です
typedef struct hack Hack;
struct hack {
char* value;
Hack arr[1];
};
に等しい:
struct hack {
char* value;
struct hack arr[1]; /* Here wrong */
};
間違った時点で の配列を定義しようとしましたがstruct hack
、の定義はまだ完了していません。ああ、あなたはそれを変更します。struct hack
新しいコードの場合、次のようになります。
typedef struct hack *Hack;
struct hack {
char* value;
Hack arr;
};
Hack node = malloc(sizeof(struct hack));
node->arr = malloc(sizeof(struct hack) * numElems);
この場合、「ノード」は単一の構造ハックへのポインタです。そして、このエンティティのメンバー「arr」は、構造ハックの配列へのもう 1 つのポイントです。それ以外の場合は、データを典型的な連結リストとして構築できます。
更新:ノード内のすべての値が初期化されていないことに注意(node->arr)[i]
してください! memset()
の直後にそれらをすべてゼロにする必要がありますmalloc()
。または、使用する前に有効な値を割り当ててください。有効な値を代入する前に使用すると、セグメンテーション違反に対応するのが最善です。最悪の場合、どこが間違っているかを見つけるのに何日もかかります。