Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用析构函数时无法删除链表_C++_Pointers_Destructor - Fatal编程技术网

C++ 调用析构函数时无法删除链表

C++ 调用析构函数时无法删除链表,c++,pointers,destructor,C++,Pointers,Destructor,我想测试析构函数,所以我手动调用它(在程序的最后一行) 但随后我得到了对象0x100103ad0的*错误:未分配要释放的指针。我不知道我做错了什么。我已经读了尽可能多的相关文章,但找不到解决办法。希望有人能帮忙 您没有将列表从未定义的值设置为已知值的构造函数,因此,list从未设置为任何值,您正在尝试删除它 尝试添加设置list=nullptr的默认构造函数是否在某处分配内存?如果操作正确,将自动调用析构函数。不要自己给他们打电话。如果你需要的话,相信我,你会知道的。你是说我的代码是正确的,只是

我想测试析构函数,所以我手动调用它(在程序的最后一行)


但随后我得到了对象0x100103ad0的*错误:未分配要释放的指针。我不知道我做错了什么。我已经读了尽可能多的相关文章,但找不到解决办法。希望有人能帮忙

您没有将列表从未定义的值设置为已知值的构造函数,因此,
list
从未设置为任何值,您正在尝试删除它


尝试添加设置
list=nullptr的默认构造函数

是否在某处分配内存?如果操作正确,将自动调用析构函数。不要自己给他们打电话。如果你需要的话,相信我,你会知道的。你是说我的代码是正确的,只是没有手动调用它?在构造函数中将
set::list
设置为
nullptr
,还是它未初始化?是的,它使用初始化列表将list设置为nullptrI。Set():list(nullptr),sizeOfList(0){}<代码>设置
还需要一个复制构造函数。
void Set::remove(Set::Node* p) {
    if(p == nullptr) return;
    Node* tmp = p->next;
    delete p;
    return remove(tmp);
}

Set::~Set() {
    remove(list);
}

class Set {
public:
~Set();

private:
    struct Node {
        int value;
        Node* next;
    };
    Node* list;
}

Set& Set::operator= (const Set& other) {
    if(this == &other) return *this;
    list = copy(other.list);
    sizeOfList = other.sizeOfList;
    return *this;
}

Set::Node* Set::copy(Set::Node* list) {
    if(list == nullptr) return nullptr;
    return cons(list->value, copy(list->next));
}

Set::Node* Set::cons (int value, Set::Node* next) {
    Node* tmp = new Node;
    tmp->value = value;
    tmp->next = next;
    return tmp;
}

Set() : list(nullptr), sizeOfList(0) {};
x.~Set();