C中的动态大小数组

时间:2015-02-24 22:08:18

标签: c linked-list

我正在尝试使用具有动态内存分配的节点Array,这样我就可以在运行时增加节点数量。但是我似乎得到了一个我不知道的错误。我可能以错误的方式使用阵列,所以请检查并纠正我。 listNo代码中使用的是一个整数变量。

代码:

Node* lists = (Node*) malloc(100 * sizeof(lists));

printf("\n Enter the number of lists:");
scanf("%d", &nbrOfLists);

if(nbrOfLists < 0)
    return -1;
if(nbrOfLists>100)
    lists = realloc(lists, 100 * sizeof(lists));


lists[listNo] = NULL;  // getting error here incompatible types assigning Node from type 'void*'
lists[listNo]= insertValue(lists[listNo], val); 

我的意思是数组中的每个元素都有一个单独链表的第一个元素。下一个元素是另一个链表的另一个独立的第一个节点。

3 个答案:

答案 0 :(得分:1)

对于链表,您不需要为所有元素分配内存。您必须拥有单个根元素Node * root并将所有其他元素链接到它。无需mallocrealloc - 这就是“链接列表”的概念。在您的示例中,您有动态的对象数组。

答案 1 :(得分:0)

  1. 你应该学习指针概念。代码表明您不太了解它。只是友好的长期记录。
  2. lists的类型为pointer to Node,&#34;地址&#34;,在32位操作系统中为4字节,64位 - 8字节。但与实际Node结构大小无关。
  3. 当你执行`malloc(N * sizeof(列表))时,你实际上分配了N个元素,每个元素都是地址(4或8个字节,与实际存储的信息无关)。
  4. 当您引用lists[X]时,您实际上是说&#34;请取Node的地址,然后在其下面加上第Node条&#34;。您的意思是Node,而不是&#34;地址Node&#34;所以你的编译器说&#34;我不能为Node分配NULL&#34;。
  5. 希望这会有所帮助。 请重新检查C中的指针概念。阻止问题让很多人进一步成长。

    要说&#34;请分配类型为Node&#34;的N个元素。你应该写一些类似的东西:

    Node *lists = realloc(lists, N * sizeof(*lists));
    

    您最好说Node *list而不是Node* list(实际上它会产生相同的代码,但请检查有什么区别 - 这是基本原则,您应该自己学习)。< / p>

答案 2 :(得分:0)

如果你想要一个指向节点的指针数组,那么你需要一个指针指向指向节点的指针数组的节点的第一个指针。这将是一个可变大小数组的双指针:node ** arrayofpoitnerstonode; ,那么arrayofpoitnerstonode [0]将是第一个指向节点的指针,arrayofpoitnerstonode [1]将是指向节点的第二个指针,....