链表初始化中的C ++分段错误

时间:2019-04-21 22:36:33

标签: c++

我正在为下周的CS考试做准备,我正在尝试组合各种不同的程序来学习(这不是我要你们去做我的作业)。

无论如何,我现在制作的程序应该以各种方式(插入节点,追加节点,反向列表等)修改链表

我当前的问题是初始化列表。

以下是相关代码:

 //linkedlist.h
#pragma once

struct Node
{
    int datum;
    Node* next;
};

class linkedlist
{
private:
  Node* head;
  Node* duplicateLinkedList(const Node* pOldHead)const;
public:
  unsigned int memberCount()const;
  void insertNode(int x);
  void removeNode(int x);
  void printNode()const;
  void appendNode(int x);
  void initList();
};


//linkedlist.cpp
#include <iostream>
#include "linkedlist.h"
using namespace std;

//Segmentation fault occurs in here
void linkedlist::initList()
{
  head->datum = 0;
  head->next = NULL;
}

我只是希望初始化列表,但我遇到了段错误。我知道我可以使用默认构造函数,但这是我们在课堂上一直使用的格式。如果需要,我可以提供更多代码,但是我相信这已经足够。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您将取消引用未初始化的指针:head->next = NULL;head->datum = 0;

要初始化您的列表,您可以:

struct Node
{
    int datum{};
    Node* next{nullptr};
};

void linkedlist::initList(){
    head = nullptr;
    //head->datum = 0; don't do this becuase head is nullptr
    //head->next = NULL; // don't do this head is nullptr.
}