分段故障:核心丢弃;的std ::双端队列

时间:2016-05-12 18:00:52

标签: c++ list templates deque

对于我的班级,我必须实施一个班级" List"它使用std :: deque来"模型"列表的功能(不要问我为什么)。该类需要是模板类。

我还读过,如果你在类上使用模板,那么header和.cpp文件中的类的分离有点不同。所以我在头文件中实现了所有内容。

但是,如果我实例化" List"的对象并使用成员函数" ins"要在我的列表中附加内容,它会在编译后给出分段错误。

继承人我的.h:

#ifndef LIST_H
#define LIST_H

#include <deque>
#include <iostream>


template <typename T>
class List {

public:
List();
void del();
void ins(T x);
void adv();
void end();
void reset();
void setEnd();
T get();


private:
std::deque<T>deque;
T *pos;
int ptrPos = 0;
T element;
};

template <typename T>
List<T>::List(){};

template <typename T>
void List<T>::ins(T x){
    deque.push_back(x);
    *pos = x;
    ptrPos++;
}

template <typename T>
void List<T>::del(){
    deque.erase(ptrPos);
    *pos = deque.at(ptrPos);
}

template <typename T>
void List<T>::adv(){
    ptrPos++;
    *pos = deque.at(ptrPos);
}

template <typename T>
void List<T>::end(){
    if(ptrPos == deque.size()){
        std::cout << "Der Positionszeiger zeigt auf das Ende der Liste" << std::endl;
    }else{
        std::cout << "Der Positionszeiger zeigt NICHT auf das Ende der Liste" << std::endl;
    }
}

template <typename T>
void List<T>::setEnd(){
    ptrPos = deque.size();
    *pos = deque.at(ptrPos);
}

template <typename T>
T List<T>::get(){
   return deque.at(ptrPos); 
}

template <typename T>
void List<T>::reset(){
    *pos = deque.at(1);
    ptrPos = 1;
}

#endif  /* LIST_H */

和我的main.cpp:

#include <cstdlib>
#include "List.h"

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {

    List <int> ListInt;




    ListInt.ins(5);

    return 0;
}

我感谢任何帮助或建设性的批评。 如果遗漏任何重要内容,请随时告诉我。

致以最诚挚的问候,

与Dethe

1 个答案:

答案 0 :(得分:0)

您的问题是*pos = x;,而不是std::deque。构造ListInt时,使用默认构造函数,该构造函数不会初始化pos。执行*pos = x;时,取消引用未初始化的指针,该指针是未定义的行为并导致崩溃。

我不确定您尝试使用pos是什么,但它看起来根本不需要指针。