C++ 打印两个链表中的元素行为怪异

C++ 打印两个链表中的元素行为怪异,c++,pointers,C++,Pointers,我用下面的代码写了一个链表。第一次打印正常,但第二次打印不正常 int main() { Node *A, *B; B = InsertTail(B, 2); B = InsertTail(B, 3); B = InsertTail(B, 8); B = InsertTail(B, 10); Print(B); A = InsertTail(A, 1); A = InsertTail(A, 5); A = Inser

我用下面的代码写了一个链表。第一次打印正常,但第二次打印不正常

int main() {
    Node *A, *B;


    B = InsertTail(B, 2);
    B = InsertTail(B, 3);
    B = InsertTail(B, 8);
    B = InsertTail(B, 10);

    Print(B);

    A = InsertTail(A, 1);
    A = InsertTail(A, 5);
    A = InsertTail(A, 10);
    A = InsertTail(A, 12);
    A = InsertTail(A, 16);

    Print(A);

    return 0;
}
函数
InsertTail
将第二个参数中的数据插入列表末尾,并返回列表的
头。和
Print
函数打印所有元素的列表

打印功能的实现如下

void Print(Node *head)
{
    Node *current = head;
    if(head == NULL){ return; }
    while(current != NULL){
        cout << current->data << endl;
        current = current->next;
    }
}
我试着调试它,
A
的第一个值很好,但是在第二个值上,有
data=1836017711
。这是一个截图。

在使用垃圾初始化列表时,应使用NULL初始化列表:

Node *A, *B;
应该是

Node *A=NULL, *B=NULL;

在调用之前,您似乎既没有初始化
A
也没有初始化
B
。根据您的
Print
功能判断,我认为
A
B
应该初始化为
NULL

Node *A=NULL, *B=NULL;
如果没有初始化,我想这是未定义的行为,任何事情都可能发生。在最简单的情况下,
A
B
恰好指向内存中包含随机内容的随机位置(您非常幸运,甚至
B
工作)


另外,为什么要在尾部插入,但只保留指向头部的指针?我建议您也保留一个指向尾部的指针,这样您就不会每次都沿着所有列表进行操作。

您正在使用一个统一的指针调用
InsertTail
。@imreal我这样做之后发生了什么?另外,谢谢,我修复了它:)您不能保证在第一次插入时
头将
NULL
,请尝试
Node*A=nullptr,*B=nullptr90%的时候,你的编译器应该为你发出警告。哈哈。。我不知道。
Node *A=NULL, *B=NULL;