我有像这样的结构
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->列表[0]包含1 ==> 1 ==> 2那么它将会消失并且c-> lists [1]将被初始化并准备好用于链表功能。
非常感谢任何帮助
答案 0 :(得分:4)
这是错误的
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
或malloc
成功,否则请勿更新realloc
,您需要检查返回非NULL
}。