C++释放内存给我放弃转储?

C++释放内存给我放弃转储?,c++,pointers,memory,segmentation-fault,abort,C++,Pointers,Memory,Segmentation Fault,Abort,我有一个解构器,它应该释放我所做的指针,但它不能正常工作。这是我类中声明所有指针的部分 private: struct Edge { Vertex* node; }; struct Vertex { vector< Edge > adjList; Vertex *path; }; vector<Vertex*> vertices; priority_queue< V

我有一个解构器,它应该释放我所做的指针,但它不能正常工作。这是我类中声明所有指针的部分

private:
    struct Edge {
        Vertex* node;
    };

    struct Vertex {
        vector< Edge > adjList;
        Vertex *path;

    };

    vector<Vertex*> vertices;
    priority_queue< Vertex* > pq;
我注释掉了我的adjList,因为我尝试了不同的方法来实现它,但没有任何效果。有人能帮我吗

忘记提到所有这些指针都与同一个顶点/节点相关。所有使用的顶点/节点都在我的顶点内

编辑:我让它工作起来了,结果发现我把事情复杂化了,只需要这样做

void makeEmpty( Vertex * & v ) {
        delete v;
        v = nullptr;
}
Vertex*v=新顶点我被告知不必担心删除这些指针

嗯,它们是原始指针。您确实需要担心删除它们。但通常最简单的解决方案是将所有顶点放在一个图类中,让它拥有一切,而不必担心节点级别的所有权


如果您将图形一分为二,或者正在执行可能将图形一分为二的操作,事情会变得有点棘手。但即便如此,从旧图中提取新图,并将受影响的节点转移到新图的操作通常也不太困难。

我认为,如果结构中有一个顶点指向一个顶点指向另一个顶点,该顶点指向。。。通向第一个顶点,你会有无限递归吗?试着打印你看到的指针:cout@coyotte508,不,那不会发生,我在我的任务结束时没能把它弄空,然后被甩了。转储实际上发生在最后一次删除指针的末尾。如果你不能在函数的末尾而不是开头,你就看不到它在崩溃之前研究了哪个向量,如果它已经在那里了。@coyotte508我明白了。我照你说的做了,看了0x600038db0看了0x600038df0看了0x600038e30看了0x600038e70看了0x600038e30被丢弃的堆芯应该会更好看!您有两次查看0x600038e30,这意味着您在同一个向量中进行了两次,因此您在双重删除/等方面遇到了问题。我的顶点在一个类中。Vertex是该类中的结构。我所有定义“新顶点”的函数也在我的class@b1234:这可能意味着删除每个顶点的函数应该在同一个类中。
void makeEmpty( Vertex * & v ) {
        delete v;
        v = nullptr;
}