C 处理记忆,使我流产了转储



我有一个解构器,该解构器可以用我制作的指针进行处理,但它无法正常工作。我的班级的一部分声明了所有指针

private:
    struct Edge {
        Vertex* node;
    };
    struct Vertex {
        vector< Edge > adjList;
        Vertex *path;
    };
    vector<Vertex*> vertices;
    priority_queue< Vertex* > pq;

,有时我会在诸如so so Vertex* v = new Vertex之类的函数中声明新的顶点。有人告诉我,我不必担心删除这些指针。这是我的功能,使我的记忆被解构器调用

称为
void makeEmpty( ) {
    for(int i = 0; i < total; ++i)
        makeEmpty( vertices[ i ] );
    total = 0;
}
void makeEmpty( Vertex * & v ) {
    for( int i = 0; i < v->adjList.size(); ++i ){
        //delete v->adjList[ i ].node;
        //v->adjList[ i ].node = nullptr;
    }
    if ( v->path != nullptr ) {
        makeEmpty( v->path);
        delete v;
        v = nullptr;
    }
}

我评论了我的adjList,因为我正在尝试如何实现这一方法,但没有任何方法。谁能帮我吗?

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

编辑:我让它起作用,事实证明我过于复杂的事情,只需要做这个

void makeEmpty( Vertex * & v ) {
        delete v;
        v = nullptr;
}

" Vertex* v = new Vertex我被告知我不必担心删除这些指针。"

好吧,它们是原始的指针。您必须担心删除它们。但是通常最简单的解决方案是将所有顶点放入Graph类,让所有内容都拥有所有内容,而不必担心节点级别的所有权。

如果您将图表切成两分,或者正在进行操作,那么事情会有些毛茸茸。但是即使那样,通常不太难以从旧的Graph提取新的Graph并将受影响的节点传输到新图。

相关内容

  • 没有找到相关文章

最新更新