将指针设置为 null 会产生运行时错误

Setting pointer to null creates runtime error

我环顾四周,还没有看到像这个问题这样具体的问题。

我试图在这个程序中创建一个链表,但是我得到一个 运行 时间错误并且在我 运行 时没有构建错误。

主要:

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

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

    LinkedList<int> myIntList;
}

链表class:

#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() 中的任何语句会使程序 运行 顺利进行.

您必须在调用 head->next = NULL 之前构造 head。但这意味着当您创建它时列表中有一个空节点。

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;
};