Установка указателя на ноль создает ошибку во время выполнения - PullRequest
0 голосов
/ 20 февраля 2019

Я искал и не видел вопроса с такой специфической проблемой.

Я пытаюсь создать связанный список в этой программе, но я получаю ошибку во время выполненияи никаких ошибок сборки при запуске.

Main:

#include <iostream>
#include "LinkedListInterface.h"
#include "LinkedList.h"
#include <fstream>

int main(int argc, char * argv[])
{
    ifstream in(argv[1]);

    LinkedList<int> myIntList;
}

Класс LinkedList:

#ifndef LINKED_LIST_H
#define LINKED_LIST_H
#include <string>
#include <sstream>

using namespace std;

template<typename T>
class LinkedList : public LinkedListInterface<T>
{
public:
    LinkedList()
    {
        head->next = NULL;
    }
private:
    struct Node
    {
        T data;
        struct Node *next;
    };
    Node *head;
};

Я заверил, что проблема не виз-за ошибки в argv [1], и удаление любого из операторов в LinkedList () или main () делает программу гладкой.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы должны построить head перед вызовом head->next = NULL.Но это будет означать, что при его создании в списке будет пустой узел.

template<typename T>
class LinkedList : public LinkedListInterface<T>
{
public:
    LinkedList()
    {
        // At least do this
        head = new Node();
        head->next = NULL;

        // The best idea is to do below:
        // head = null;
    }
private:
    struct Node
    {
        T data;
        struct Node *next;
    };
    Node *head;
};
...