我对数据结构、双向链表有一些问题
I have some problems with the data structure, doubly linked list
这里是节点的声明。
template <typename E> class Link {
private:
static Link<E>* freelist;
public:
E element;
Link* prev;
Link* next;
Link(const E& it, Link* prevp, Link* nextp) {
element = it;
prev = prevp;
next = nextp;
}
Link(Link* prevp = NULL, Link* nextp = NULL) {
prev = prevp;
nextp = nextp;
}
void* operator new(size_t) {
if(freelist == NULL)
return ::new Link;
Link<E>* temp = freelist;
freelist = freelist->next;
return temp;
}
void operator delete(void* ptr) {
((Link<E>*) ptr)->next = freelist;
freelist = (Link<E>*)ptr;
}
};
template <typename E>
Link<E>* Link<E>::freelist = NULL;
并且类 TwoWayList 是从 ADT 类列表继承而来的。而且我确信问题与ADT无关。
这是类 TwoWayList 的声明,我只是选择一些我认为可能导致问题的部分。
template <typename E> class TwoWayList :public List<E> {
private:
Link <E>* head;
Link <E>* tail;
Link <E>* curr;
int cnt;
void init(){
curr=tail=head=new Link<E>;
cnt=0;
}
void removeall(){
while(head!=NULL){
curr=head;
head=head->next;
delete curr;
}
}
public:
void append(const E& it) {
tail->prev = tail->prev->next = new Link<E>(it, tail->prev, tail);
cnt++;
}
这是主要功能
int main(){
TwoWayList<int> l;
l.append(1);
l.append(2);
l.append(3);
l.append(4);
l.append(5);
}
每当我把这句话tail->prev = tail->prev->next = new Link<E>(it, tail->prev, tail);
,就会有一个窗口出来说Program received signal SIGSEGV, Segmentation fault
你的构造函数应该与类同名,而不是 init((,然后 init(( 将正确设置指针,这样就不会发生 sigfault。
同样,您需要在解构器中释放所有内容以防止内存泄漏。
相关文章:
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 如何实现容纳整数和无效指针的双向链表?
- 为什么我的双向链表删除函数会删除多个节点?
- 我对数据结构、双向链表有一些问题
- C++ 双向链表:使用矩阵类成员创建和填充列表
- 在 c++ 中具有向量的双向链表构造函数
- 如何在双向链表上实现复制赋值?
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 在双向链表中实现 Popback
- 在C++中反转双向链表
- 双向链表 - 无法删除第一个节点
- 我当前实现的双向链表类是否需要重构迭代器 end() 功能?
- 双向链表 std::unique_ptr 类在节点删除时无法按预期工作
- 双向链表问题 - 包含项目但不显示
- 双向链表问题(特别是复制构造函数和删除函数)
- 将项目添加到双向链表的背面时遇到问题
- 添加到双向链表的背面时遇到问题
- 双向链表节点交换问题
- 双向链表插入问题
- 将节点添加到双向链表时出现问题