我正在尝试在以下代码中输出链接列表中的字符,但cout
函数中的printList
不会打印任何内容。我无法准确了解原因,以及如何在链表中打印我的字符。
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct linkedListNode{
char obj;
linkedListNode *next;
}node;
void insertLinkedList(char *p,node *head){
node *end = head;
while(*p != '\0'){
node *temp = (node *)malloc(sizeof(node));
temp -> obj = *p;
end -> next = temp;
end = temp;
p++;
}
}
void printList(node *head){
node *temp = head;
while(temp){
cout << temp->obj << ",";
temp = temp -> next;
}
}
int main() {
node *HEAD = (node *)malloc(sizeof(node));
char p[] = "nitin";
insertLinkedList(p,HEAD);
printList(HEAD);
return 0;
}
如果我的调试技巧没有让我失败,那么列表就会被填充。请帮忙。
谢谢!
答案 0 :(得分:2)
您忘记终止链接列表,因此应用程序崩溃了。当我使用VS2013在Windows 8.1上运行时,我实际上在崩溃之前看到了输出。但那可能是好运。在另一台机器/配置上,它可能会在刷新控制台输出之前崩溃,因此您可能永远不会看到它确实起作用。
void insertLinkedList(char *p, node *head){
node *end = head;
while (*p != '\0'){
node *temp = (node *)malloc(sizeof(node));
temp->obj = *p;
end->next = temp;
end = temp;
p++;
}
end->next = NULL;
}
逐步调试调试器中的代码应该清楚地知道发生了什么。
答案 1 :(得分:1)
您的代码按照您的说法输出所有内容,但是一旦printList
落在列表末尾,它就会触发未定义的行为。
首先,您永远不会初始化新节点的next
指针,这意味着您的列表未正确终止。它实际上正确打印所有内容,但它没有停止正确打印,因为您的列表未终止。您必须记住将最后一个新元素的next
指针设置为空指针。 (这也适用于头部元素。)
其次,标准输出是行缓冲的。不要忘记输出std::endl
以查看屏幕上的实际输出。