我正在尝试创建自己的哈希表数据结构,但遇到了一个意想不到的问题,我无法解决,也没有找到令人满意的解决方案。
看,我有这个链表结构
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 */
如果我还没有为它分配一个 Link 结构,那么该if
语句“应该”返回 false,但它没有。
解决这个问题的一种方法是使用 for 循环初始化链表的所有第一个链接,然后检查值,但这不是我想要的。
那么有谁知道按照我想要的方式解决这个问题的方法吗?