为什么head
会出现一些随机值?
// Simple insertion at the starting of link list
#include<iostream>
using namespace std;
struct node{
int d;
node *next;
}; // creation of node
node *head=new node; // is there any problem?
void insert(int x)
{
if (head==NULL) { // is there something wrong?
head->d=x;
haad->next=NULL;
} else {
node *t=new node;
t->d=x;
t->next=head;
head=t;
}
}
int main() {
insert(1); // function calling
insert(2); // function calling
insert(3); // function calling
while(head!=NULL) {
cout<<head->d<<" ";
head=head->next;
} // this is going on to infinity
return 0;
}
这段代码一直在无穷无尽,我无法理解为什么?
为什么{3} 1后head
会出现一些随机值?全球宣布是否有任何问题?
答案 0 :(得分:1)
head
会出现一些随机值,因为列表中的最后一个元素使用next
指向随机值。
这最后一个元素是您在此行中创建的第一个节点:
node *head=new node;
通过这样做,您在堆上为此节点分配内存,但是,您没有为节点的字段设置任何值,包括next
。然后在循环中,当head
指向最后一个节点(首先分配)时,head->next
不是NULL
,因此循环继续。
三个旁注:
head
本身迭代列表元素不是一个好主意,因为你丢失了指向列表头部的指针。head
可以在全球范围内宣布,但通常你应该有充分的理由。在您的程序中,我将在main()
中定义它并将其传递给需要它的函数。此代码:
if (head==NULL) { // is there something wrong?
head->d=x;
haad->next=NULL;
没有多大意义:它永远不会运行,如果它会 - >&gt;分段错误(因为如果head
为NULL
,则无法引用其字段。
希望它有所帮助。