繁体   English   中英

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

[英]Segmentation fault when trying to use a set function

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

#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 就会发生分段错误。 有小费吗?

node<myType>* p;

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

 p->setData(d);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM