(核心转储)c ++中的链接列表

Posted

技术标签:

【中文标题】(核心转储)c ++中的链接列表【英文标题】:(Core dumped) Linked Lists in c++ 【发布时间】:2019-02-04 14:41:32 【问题描述】:

我正在尝试编写一个简单的程序来将整数值存储在 3 节点链表中,但在我插入第一个值后它显示“分段错误(核心转储)”。

我对 c++ 比较陌生,所以我真的不知道我做错了什么。我已经尝试在 Internet 上搜索解决方案,但我似乎找不到任何解决方案。

#include<iostream>
using namespace std;
struct node
   int num;
   node *next;
;
node *head=NULL;
node *tail=NULL; 
void create(int num)
   node *temp=new node;
   temp->num=num;
   temp->next=NULL;
   if(head=NULL)
      head=temp;
      tail=temp;
      temp=NULL;
   
   else
      tail->next=temp;
      tail=temp;
   


void display(node *current )
    while(current!=NULL)
         cout<<current->num<<endl;
         current=current->next;
    


int main()

   int num;
   for(int i=0;i<3;i++)
       cout<<"Enter a number:";
       cin>>num;

   
   display(head);
   return 0;
 

感谢任何帮助和/或提示 :)

编辑:好的,所以我看到我错过了 int he if 子句 head 应该是 head==NULL,但现在它最后没有显示链表:(

【问题讨论】:

head=NULL 应该是head == NULL 准确来说if(head=NULL)应该是if (head == NULL) node *head=NULL;是可以的。如果您在布局代码时使用几个空格更容易看到这种错误? 仅供参考,从 c++11 开始,您应该使用 nullptr 而不是 NULL,并且从 c++11 开始,您不应再使用 newdelete,而是使用智能指针用于创建对象和处理对象的所有权。 调试器。使用调试器。调试器将允许您单步执行代码,观察变量中的值。通常,使用调试器比正确发布到 *** 并等待有人为您检查或调试程序要快得多。 【参考方案1】:

在 if 语句中将 head=NULL 更改为 head==NULL。请在 for 循环中调用 create 函数。这是我的解决方案:

#include<iostream>
using namespace std;
struct node 
    int num;
    node *next;
;
node *head = NULL;
node *tail = NULL;
void create(int num) 
    node *temp = new node;
    temp->num = num;
    temp->next = NULL;
    if (head == NULL) 
        head = temp;
        tail = temp;
        temp = NULL;
    
    else 
        tail->next = temp;
        tail = temp;
    


void display(node *current) 
    while (current != NULL) 
        cout << current->num << endl;
        current = current->next;
    


int main() 

    int num;
    for (int i = 0; i < 3; i++) 
        cout << "Enter a number:";
        cin >> num;
        create(num);
    
    display(head);
    return 0;

【讨论】:

谢谢你,在我的编码中犯了一些基本错误我觉得很愚蠢。下次我一定会更加小心:)

以上是关于(核心转储)c ++中的链接列表的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 队列 - C ++中的链接列表实现

从 C 中的双向链接列表中删除特定项目

c中的分段错误(核心转储)

C中的分段错误问题(核心转储)

c中的核心转储和动态内存分配

C中的另一个核心转储问题