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

标签 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] 留空直到它实际被分配一个值。

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

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

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

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

那么有谁知道按照我想要的方式解决这个问题的方法吗?

最佳答案

在分配 entries 时,您可以使用 calloc 而不是 malloc,例如:

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

关于c - 结构数组,无法检查条目是否为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226159/

相关文章:

c - C中信号量集中的最大信号量数量

c - 当处于 4 位数据模式时,是否可以将其他 4 位用于其他用途?

c - 指针&字符段错误

python - 有没有办法在python中创建保持其长度固定的数组?

c - 为什么这个搜索函数返回一个指向指针的指针呢?

c - 不一致的 malloc 内存损坏

改变指针数组的内容

改变C中字符串数组中字符的值

javascript - 订购 key :value pairs of objects

java - 如何使对数组的写入对其他线程可见