构造函数内初始化变量引发段错误:双向链表实现集合问题
解决双向链表集合构造函数中的段错误问题
嘿,我来帮你排查这个奇怪的段错误!你说在构造函数里给_size = 0赋值时触发了崩溃,这事儿看起来有点反直觉——毕竟_size只是个普通的int成员变量,正常直接赋值不该出问题。大概率是你没正确初始化哨兵节点_head和_tail,导致内存访问出错,而报错位置刚好落在了_size赋值这一行(段错误的报错位置有时候会和真正的问题根源有偏差哦)。
先给你一个正确的带哨兵双向链表初始化实现
带哨兵的双向链表核心是先创建两个哨兵节点,让它们互相连接,再初始化大小:
Set::Set() { // 创建头哨兵节点 _head = new Elem(); // 创建尾哨兵节点 _tail = new Elem(); // 双向连接两个哨兵 _head->next = _tail; _tail->prev = _head; // 初始化集合元素数量 _size = 0; }
为什么你的代码会崩?
如果_head和_tail是未初始化的野指针,哪怕你没在构造函数里显式访问它们,编译器的内存布局或者某些隐式操作(比如类成员的初始化顺序)都可能导致非法内存访问,最终在_size赋值时触发段错误——野指针的问题总是这么捉摸不定。
额外提一句析构函数的正确实现
别忘了写完构造函数后,要在析构函数里释放所有节点(包括两个哨兵),避免内存泄漏:
Set::~Set() { Elem* current = _head; while (current != nullptr) { Elem* nextNode = current->next; delete current; current = nextNode; } }
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

