独自のハッシュ テーブル データ構造を作成しようとしていますが、予期しない問題に遭遇しました。これは解決できず、満足のいく解決策がまだ見つかりません。
ほら、私はこのリンクされたリスト構造を持っています
struct Link
{
int v;
struct Link* next;
}
次に、ハッシュ テーブル構造内で、次のように配列リンク リストを追跡します。
struct Link** entries;
私が遭遇したのは、これが機能するためには、最初に次のように配列を初期化する必要があるということです:
entries = malloc(sizeof(struct Link*) * N);
for (i = 0; i < N; i++)
entries[i] = malloc(sizeof(struct Link));
私が望むのはfor
、構造体を初期化するループを実行する必要がないことです。これは、リンクされたリストが機能する方法ではないため、entries[x]
実際に値が割り当てられるまで空白のままにしたいです。
ループを実行しないと、次のようになりfor
ます。
if (entries[x] != NULL) /* true, the array is initialized */
entries[x]->v = value; /* SEGFAULT, there is no struct initialized */
if
Link 構造体をまだ割り当てていない場合、そのステートメントは false を返す必要がありますが、そうではありません。
この問題を解決する 1 つの方法は、リンク リストのすべての最初のリンクをその for ループで初期化し、値をチェックすることですが、それは私が望んでいることではありません。
それで、私が望むようにこれを解決する方法を知っている人はいますか?