我正在尝试使用具有动态内存分配的节点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);
我的意思是数组中的每个元素都有一个单独链表的第一个元素。下一个元素是另一个链表的另一个独立的第一个节点。
答案 0 :(得分:1)
对于链表,您不需要为所有元素分配内存。您必须拥有单个根元素Node * root
并将所有其他元素链接到它。无需malloc
和realloc
- 这就是“链接列表”的概念。在您的示例中,您有动态的对象数组。
答案 1 :(得分:0)
lists
的类型为pointer to Node
,&#34;地址&#34;,在32位操作系统中为4字节,64位 - 8字节。但与实际Node
结构大小无关。lists[X]
时,您实际上是说&#34;请取Node
的地址,然后在其下面加上第Node
条&#34;。您的意思是Node
,而不是&#34;地址Node
&#34;所以你的编译器说&#34;我不能为Node
分配NULL&#34;。希望这会有所帮助。 请重新检查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]将是指向节点的第二个指针,....