我的问题是,当我尝试打印这个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
的值,该值将它指向其他地方。(