无法重新分配结构的 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
除非malloc
或realloc
成功,你需要检查return非NULL
.
我有一个这样的结构
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
除非malloc
或realloc
成功,你需要检查return非NULL
.