我的类函数的分段错误

时间:2017-04-25 03:45:07

标签: c++ segmentation-fault singly-linked-list

所以我在这里的功能上遇到了分段错误,我不确定如何纠正它。关于我如何去做的任何线索? 我包括我的课程,然后是下面的功能,让我知道我的课程。 谢谢!

template <typename T>
class Element{
private:
  Element *next_ = nullptr;
  string name_ = "";
  T color_ = T();

public:
  Element()=default;
  Element(string name, T d) : next_(nullptr), name_(name), color_(d){};
  friend ostream& operator<<(ostream& out, Element& n){


    out << n.name_ << ":" << n.color_;
    return out;

  }
  friend class PAL<T>;
};


template<typename T>
class PAL{
private:
  Element<T> *back_ = nullptr;
  Element<T> *front_ = nullptr;
  void print_list(ostream& out);  
public:
  PAL()=default;
  PAL(Element<T> n) : back_(&n), front_(&n) {};
  PAL(string n, T d);
  PAL(const PAL&);
  PAL& operator=(PAL);
  ~PAL();
  void add(Element<T> &n);
  void add(string name, T dat);
  pair<Element<T>*, Element<T>*> find(string name);    
  pair<Element<T>*, Element<T>*> find(Element<T> &n);
  void move_forward1(Element<T> &n);
  void move_to_front(Element<T> &n);  
  void move_back1(Element<T> &n);
  void move_to_back(Element<T> &n);  

  friend ostream& operator<<(ostream& out, PAL<T>& sl){
    sl.print_list(out);
    return out;
  };
};

template<typename T>
pair<Element<T>*, Element<T>*> PAL<T>::find(string name){
    pair<Element<T>*, Element<T>*> *result (nullptr);
    Element<T>* x = nullptr;
    Element<T>* y = nullptr;
    for (Element<T> *n = back_; n != nullptr; n = n -> next_){
        if (n -> name_ == name){
            x = n;
            cout << x;
            break;
        }
        y = n;
    }
    result -> first = x;
    result -> second = y;
    return *result;
}

1 个答案:

答案 0 :(得分:1)

pair<Element<T>*, Element<T>*> *result (nullptr);

接着是

result -> first = x;
result -> second = y;
return *result;

是个问题。

您尚未为result分配内存,并继续使用它,就像它指向有效对象一样。

简化它。完全删除result并将return语句更改为:

return {x, y};