结构数组,无法检查条目是否为NULL

时间:2012-09-01 08:23:27

标签: c arrays pointers struct

我正在创建自己的哈希表数据结构,但我遇到了一个意想不到的问题,我无法解决,但还没有找到令人满意的解决方案。

请参阅,我有这个链表结构

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]留空,直到它实际被赋值为止。< / p>

如果我不执行for循环,则会发生这种情况:

if (entries[x] != NULL)  /* true, the array is initialized */
  entries[x]->v = value; /* SEGFAULT, there is no struct initialized */

如果我还没有为它分配一个Link结构,那么if语句'应该'返回false,但它没有。

解决这个问题的一种方法是用for循环初始化链表的所有第一个链接,然后检查值,但这不是我想要的。

那么有没有人知道以我想要的方式解决这个问题?

3 个答案:

答案 0 :(得分:1)

嗯,你不能。未初始化的指针不一定是NULL

答案 1 :(得分:1)

分配calloc时,您可以使用malloc而不是entries,如下所示:

entries = calloc(sizeof(struct Link*),  N);

答案 2 :(得分:0)

在为malloc()分配空间后,您需要初始化指针数组。您可以使用另一个for - 循环,如:

for (i = 0; i < N; i++)
{
   entries[i] = NULL;
}

或只是使用calloc()来分配数组。这会将所有元素设置为0

entries = calloc(N, sizeof(struct Link*));

之后你需要根据需要分配元素:

if (entries[x] == NULL)
{
   entries[x] = malloc(sizeof(struct Link));
}
entries[x]->v = value;