gpt4 book ai didi

c++ - 为什么这段代码会陷入死循环?

转载 作者:行者123 更新时间:2023-11-28 04:50:48 24 4
gpt4 key购买 nike

为什么 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;
}

这段代码一直循环到无穷大,我不明白为什么?为什么 head 在 3 2 1 之后变为某个随机值?全局声明head有没有问题?

最佳答案

head 将变为某个随机值,因为列表中的最后一个元素使用 next 指向一个随机值。

最后一个元素是您在此行中创建的第一个节点:

node *head=new node;

通过这样做,您在堆上为这个节点分配内存,但是,您没有为节点的字段设置任何值,包括 next。然后在循环中,当 head 指向最后一个节点(首先分配)时 head->next 不是 NULL 因此循环继续。


三个旁注:

  1. 使用 head 本身来遍历列表元素并不是一个好主意,因为您会丢失指向列表头部的指针。
  2. head 可以全局声明,但通常你应该有一个很好的理由。在您的程序中,我会在 main() 中定义它并将它传递给需要它的函数。
  3. 这段代码:

    if (head==NULL) { // is there something wrong?
    head->d=x;
    haad->next=NULL;

    没有多大意义:它永远不会运行,万一它会 --> 段错误(因为如果 headNULL 你不能引用它的字段。

希望对您有所帮助。

关于c++ - 为什么这段代码会陷入死循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48255583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com