构造函数内部变量的定义会导致分段错误

时间:2018-03-29 19:07:47

标签: c++ struct linked-list segmentation-fault set

我正在使用带有sentinal _head和_tail节点的双向链表编写集合的实现。每个节点由Elem结构定义。我只包含导致问题的代码部分:

set.h

#include <string>
using namespace std;
class Set {
    public:
        Set();
        ~Set();
    private:
        struct Elem {
            string info;
            Elem *prev, *next;
        };
        Elem *_head, *_tail;
        int _size;
};

set.cpp

#include "set.h"
using namespace std;
Set::Set() {
    _size = 0;  // Segmentation fault from this
    _head = new Elem;
    _tail = new Elem;
    _head = nullptr;    // Segmentation fault from this
    _tail = nullptr;    // Segmentation fault from this
    _head->next = _tail;
    _tail->prev = _head;
}
Set::~Set() {
    while (_head->next != _tail) {
        _head->next = _head->next->next;
        delete _head->next->prev;
    }
}

setTest.cpp

#include "set.h"
using namespace std;
int main() {
    Set s1;
}

当我运行测试驱动程序&#34; setTest.cpp&#34;时,上面的代码导致了分段错误。我做了一些调试,并隔离了导致错误的部分。它似乎是定义_size,_head和_tail变量的三行。

为什么构造函数中这些变量/指针的定义会导致分段错误?

1 个答案:

答案 0 :(得分:0)

问题是由_head和_tail设置为null引起的。通过将它们设置为null然后尝试访问它们不再“存在”的prev和next指针。