尝试使用set函数时出现分段错误

时间:2018-10-31 20:59:48

标签: c++ segmentation-fault

我在尝试在节点类中设置私有数据成员时遇到问题。这是文件:

#include <iostream>
#include <string>
using namespace std;

template <class myType>
class node{
    private:
        myType data;
        node<myType>* next;
    public:

        // other functions

        void setData(myType p){
            data = p;
        }

        // other functions

};

这是尝试使用节点类的类:

template <class myType>
class LL{
    private:
        node<myType>* head;
        int index;
    public:

        // other functions            

        void addItem(myType d){
            node<myType>* p;
            p->setData(d);
            p->setNext(NULL);
            if(head == NULL){
                head = p;
            }
            else{
                node<myType> *temp;
                temp = head;
                head = p;
                head->setNext(temp);
            }
        }

        // other functions
};

尝试在第一个节点类中使用setData函数时,会发生问题。在LL类的addItem函数中,当调用p-> setData时,出现了分段错误。通过调试,我发现一旦程序尝试在setData函数中设置data = p,就会发生分段错误。有小费吗?

1 个答案:

答案 0 :(得分:1)

node<myType>* p;

您已经声明了一个指针。您尚未初始化指针,因此它不会指向任何节点(它也不指向null;指向的内存地址不确定)。

p->setData(d);

在这里,您取消引用p以在指向的对象上调用成员函数。但是没有指向对象,因为您尚未创建任何节点,并且p也没有指向任何节点。调用未初始化指针的成员函数的行为是不确定的(更普遍的是,读取任何不确定的值具有不确定的行为)。

相关问题