为什么不打印任何东西?

时间:2014-08-12 20:10:32

标签: c++ pointers char

我正在尝试在以下代码中输出链接列表中的字符,但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;
}

如果我的调试技巧没有让我失败,那么列表就会被填充。请帮忙。

谢谢!

2 个答案:

答案 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以查看屏幕上的实际输出。