我的问题是,当我尝试打印此10个元素列表时,Eclipse中什么也没有发生。我读到它的原因是某个地方存在Null指针异常,但我似乎找不到它。预先感谢您的帮助!
DLinkedList* createList()
{
int i=0;
DLinkedList* head = NULL;
DLinkedList* temp = NULL;
DLinkedList* temp2 = NULL;
temp = (DLinkedList*)malloc(sizeof(DLinkedList));
temp2 = (DLinkedList*)malloc(sizeof(DLinkedList));
temp->sensorData = readSensor()->sensorData;
temp->next = NULL;
for(i=0; i<10; i++)
{
if(head == NULL)
{
head = temp;
head->prev = NULL;
printf("1 \t");
}
else
{
temp2 = head;
while(temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next = temp;
temp->prev = temp2;
printf("2 \t");
}
}
return head;
}
在整个循环中,temp
指向同一块内存,代表单个节点。您正在反复设置该节点的next
和prev
指针指向自身。
在我看来,当您尝试构建列表时,这将导致无限循环。在第二次迭代之后,遍历列表将永远不会结束,因为每次您步入下一个节点时,您实际上都在看同一个节点。
您可能希望在循环的每次迭代中使用新的malloc调用来重新初始化temp
,因此您实际上得到了不同的节点。
((也无需使用malloc初始化temp2
。您永远不会对该内存进行任何操作。temp2
的第一个用途是为其分配head
的值,该值将其指向其他位置。)