我有一个这样的课程:
class Foo{
public:
Foo* next = nullptr;
Foo() = default;
Foo(Foo *next){
Foo::next = new Foo(*next);
}
Foo(const Foo ©){
next = new Foo(*copy.next);
}
~Foo(){
delete next;
}
}
它编译,但是当我在任何地方实例化该程序时,程序崩溃了。当使用调试器时,"断点陷阱"在delete next
触发。
为什么?
编辑:
问题是,有些情况可以将next
设置为在类外部创建的指针。我以为你可以删除在任何地方创建的指针。
答案 0 :(得分:-1)
您的指针next
未初始化,指向 未知的内容。 delete
(很可能,如果你很幸运)会尝试删除它。确保指针指向使用new
分配的内存,或者是nullptr
。