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=nullptr代码>90%的时候,你的编译器应该为你发出警告。哈哈。。我不知道。
Node *A=NULL, *B=NULL;