0

我正在尝试在 C 中设计一个数据结构,我可以将多个数组存储在一个结构中,其中每个数组的大小都不同。例如:

typedef struct task_list
{
  int total_tasks;
  unsigned int *task_array
 }task_list;

typedef struct node_list
{
  int total_nodes;
  task_list *array_node
 }node_list;

因此,如果我有 5 个节点,那么total_nodes将是5并且我希望有 5 个后续数组,即array_node[0], array_node[1]... array_node[4]。每个数组都包含无符号整数(任务)。问题是这些数组中的每一个都拥有不同数量的任务(total_tasks在 struct 中task_list),因此每个数组的大小都会不同。

如何为每个任务数组创建和分配内存?以后访问它们的最佳方式是什么?

4

3 回答 3

1

如果它们是一维数组,分配内存的最佳方法是通过 malloc。同样,由于它们是一维的,您可以通过数组表示法访问它们,注意不要超出 total_nodes 和 total_tasks 给出的范围。删除节点时使用 free 释放数组。如果数组节点变大,请使用 realloc 使数组变大并保留旧指针。

于 2013-08-12T19:14:56.870 回答
1

您需要分配一个 node_list,然后分配它的 array_node 来保存 5 个 task_lists,然后分配每个 task_lists 的 task_arrays 来保存可变数量的任务(使用malloc(total_tasks) * sizeof(unsigned int)))。

于 2013-08-12T19:15:57.533 回答
0

您应该进行修改node_list,以便它维护一个指向的指针数组task_list

typedef struct node_list
{
  int total_nodes;
  task_list **array_node;
 }node_list;

现在,如果您需要 5 个任务列表,则为task_list第一个指向的 5 个指针分配空间。

node_list n;
n.total_nodes = 5;
n.array_node = malloc(n.total_nodes * sizeof(task_list *));

然后,您遍历每个array_node,并分配适当大小的task_list.

for (i = 0; i < n.total_nodes; ++i) {
    n.array_node[i] = allocate_task_list(task_list_size(i));
}

然后,要到达ith task_list

task_list *tl = n.array_node[i];
于 2013-08-12T19:22:01.110 回答