无法重新分配结构的 c 数组

Cannot realloc c array of structs

我有一个这样的结构

typedef struct ll_node {
    uint data;
    struct ll_node* next;
} ll_node;

typedef struct {
    ll_node* head;
    uint     count;
} linked_list;

typedef struct {
    linked_list* lists;
    uint list_size
} Context;

而且我需要能够让列表根据上下文动态增长。以下是我如何将链表添加到我的列表数组

void add_list(Context* c) {
    if (c->list_size == 0) {
        c->lists = malloc(sizeof(linked_list));
    } else {
        realloc(c->lists, sizeof(linked_list) * (c->list_size + 1));
    }
    linked_list_init(c->lists[c->list_size]);
    list_size++;
}

每当我重新分配时就会出现问题。我丢失了不是列表中最新索引的数据。因此,如果 c->lists[0] 包含 1==>1==>2 那么它将消失并且 c->lists[1] 将被初始化并准备好链表函数。

如有任何帮助,我们将不胜感激

这是错误的

realloc(c->lists, sizeof(linked_list) * (c->list_size + 1));

应该是

c->lists = realloc(c->lists, sizeof(linked_list) * (c->list_size + 1));

我会推荐一种安全的方法

void *clists;

clists = realloc(c->lists, sizeof(linked_list) * (c->list_size + 1));
if (clists == NULL)
    handleCurrentErrorProbablyRetryOrAbortFillingTheListAndCleanupResources();
c->lists = clists

这样你就不会在失败的情况下覆盖有效的c->list

提示:不要更新c->list_size除非mallocrealloc成功,你需要检查return非NULL.