在C中的结构中存储多个数组

时间:2013-08-12 19:09:34

标签: c arrays pointers struct

我正在尝试在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] ... {{1} }。每个数组都包含无符号整数(任务)。问题是这些数组中的每一个都包含不同数量的任务(array_node[4]中的total_tasks),因此每个数组的大小将不同。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分: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));
}

然后,到达i th task_list

task_list *tl = n.array_node[i];