C++ 发布添加和打印指针管理的列表元素

C++ 发布添加和打印指针管理的列表元素,c++,pointers,c++11,C++,Pointers,C++11,我这里有一个问题,我得到了一个内存冲突错误(我正在处理内存)和一个错误的输入。我正在做的是一个指针管理的列表 我的代码应该这样做:用多个条目更新引用的指针并打印它们。我给你看一下,它只做了一部分 代码: 您永远不会将Lyric中的下一个ptr初始化为NULL,因此当您到达列表中的最后一项时,当您试图访问它所指向的内存时,是某个垃圾指针导致崩溃 您可以通过在Lyric的构造函数中设置next to NULL来修复此问题,或者在创建之后在main.cpp中直接设置poetry->next=NULL

我这里有一个问题,我得到了一个内存冲突错误(我正在处理内存)和一个错误的输入。我正在做的是一个指针管理的列表

我的代码应该这样做:用多个条目更新引用的指针并打印它们。我给你看一下,它只做了一部分

代码:


您永远不会将Lyric中的下一个ptr初始化为NULL,因此当您到达列表中的最后一项时,当您试图访问它所指向的内存时,是某个垃圾指针导致崩溃

您可以通过在Lyric的构造函数中设置next to NULL来修复此问题,或者在创建之后在main.cpp中直接设置poetry->next=NULL


我还应该指出,您在Addition()中插入的是列表的前面,而不是列表的后面,这可能不是您想要的。

您永远不会将Lyric中的下一个ptr初始化为NULL,因此,当您到达列表中的最后一项时,当您试图访问它所指向的内存时,是某个垃圾指针导致崩溃

您可以通过在Lyric的构造函数中设置next to NULL来修复此问题,或者在创建之后在main.cpp中直接设置poetry->next=NULL


我还应该指出,您在Addition()中插入的是列表的前面,而不是列表的后面,这可能不是您想要的。

这一行是罪魁祸首:

Lyric* poetry = new Lyric();
Lyric
的默认构造函数没有为
下一个成员设置一个正常值。它保持未初始化状态,当您取消引用它时,会得到未定义的行为

您需要的是:

Lyric* poetry = nullptr;

这条线就是罪魁祸首:

Lyric* poetry = new Lyric();
Lyric
的默认构造函数没有为
下一个成员设置一个正常值。它保持未初始化状态,当您取消引用它时,会得到未定义的行为

您需要的是:

Lyric* poetry = nullptr;

一旦有了指针成员,就删除默认的复制构造函数/赋值运算符(C++11)或将它们设为私有(我只是有点偏执)。之后,考虑适当的副本构造/分配。另外,不要忘记正确的销毁。一旦你有了指针成员,就会删除默认的复制构造函数/赋值操作符(C++11)或将它们设为私有(我只是有点偏执)。之后,考虑适当的副本构造/分配。另外,不要忘记正确的销毁。非常感谢,也感谢您指出了添加项目的方式存在的问题。另外,另一张海报的示例比我的答案更有效,因为我的答案还需要您将诗歌->元组初始化为您要使用的第一个元组。他的版本可能是更好的快速修复您的代码。但是,您应该真正考虑改进您的链表实现(或者,更好地说,使用std::dequeue或其他容器)非常感谢,也感谢您指出了添加项的方式的问题。另外,另一张海报的示例比我的答案更有效,因为我的答案还需要您将poetry->tuple初始化为要使用的第一个tuple。他的版本可能是更好的快速修复您的代码。但是,您应该真正研究如何改进链表实现(或者,更好的方法是使用std::dequeue或其他容器)