c++ - 创建简单链表时无法访问内存

标签 c++ constructor linked-list

我只是想制作一个非常简单的链表,但出于某种原因,我收到“无法访问内存”错误。我已经构建了所有其他方法,但实际上我无法创建第一个节点。语言是 C++。

构造函数如下所示:

IntListNode::IntListNode(){
    data = -1;
    next = this;
    prev = this;
}

链表构造函数如下所示:

IntList::IntList(){
    IntListNode* sentinel = new IntListNode(); 
}

谁能看出问题所在?谢谢。

最佳答案

这个构造函数

IntList::IntList(){
    IntListNode* sentinel = new IntListNode(); 
}

没有意义。声明了局部变量sentinel,在退出构造函数后会立即销毁。

还有这个构造函数

IntListNode::IntListNode(){
    data = -1;
    next = this;
    prev = this;
}

非常困惑。最好不要显式声明构造函数并简单地使用聚合。或者至少构造函数看起来像

IntListNode( int value, 
             IntListNode *next = nullptr, 
             IntListNode *prev = nullptr  ) 
                : data( value ), next( next ), prev( prev )
{
}

我想数据的类型是 int。

并且没有哨兵节点的意义。您应该定义两个节点:最初将设置为 nullptr 的 head 和 tail。

关于c++ - 创建简单链表时无法访问内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750409/

相关文章:

c++ - 为什么在这种情况下不调用复制构造函数?

Java子类构造函数继承成员

python - 从中间删除节点的算法

c++ - 包含库的语言设计问题

c++ - 我如何知道哪个函数或文件以及哪一行调用了函数?

c++ - 关于类的 CPP 代码显示错误

c - 删除c中链表中最后一项的问题

c++ - 在 gcc 编译器中禁用特定优化(死代码消除)

c++ - 继承:没有合适的默认构造函数可用

c - 在函数的参数中声明指针类型以修改链表