我正在尝试创建我自己的哈希表数据结构,但我遇到了一个意想不到的问题,我无法解决,而且还没有找到令人满意的解决方案。
看,我有这个链表结构
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/