繁体   English   中英

C ++分配内存给我中止转储?

[英]C++ Deallocating memory giving me aborted dump?

我有一个析构函数,该析构函数用来释放我所做的指针,但它无法正常工作。 我的类的继承人部分,声明了所有指针

private:
    struct Edge {
        Vertex* node;
    };

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

    };

    vector<Vertex*> vertices;
    priority_queue< Vertex* > pq;

有时我会在诸如Vertex* v = new Vertex类的函数中声明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并将受影响的节点转移到新的Graph的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM