创建双链表问题
Creating a double linked list problems
我的问题是,当我尝试打印这个包含 10 个元素的列表时,Eclipse 中没有任何反应。我读到它是因为某处出现空指针异常,但我似乎找不到它。在此先感谢您的帮助!
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
指向其他地方。)
我的问题是,当我尝试打印这个包含 10 个元素的列表时,Eclipse 中没有任何反应。我读到它是因为某处出现空指针异常,但我似乎找不到它。在此先感谢您的帮助!
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
指向其他地方。)