这就是我定义图表的方式。这不是典型的图形,它特定于我要处理的问题类型。

class Vertex;

class Edge
{
public:
    Vertex *org;
    Vertex *dest;
    bool dir;
};

struct Vertex{
    int id;
    vector<Edge> edges;
    int weight;
};
struct Graph{
    vector<Vertex> vertices;
};

我在图形中添加顶点时遇到问题。这就是我的做法
Graph* graph1;
Vertex* first = addVertex(0);
graph1->vertices.push_back(*first);

addVertex函数正常运行,但是如果您仍然要引用,这里是
Vertex* addVertex(int id){
    Vertex*newVertex = new Vertex;
    newVertex->id=id;
    newVertex->weight=0;
    return newVertex;
}

该函数在graph1-> vertices.push_back(* first);之前停止工作。

最佳答案

graph1本身是一个统一的指针。因此,调用它的成员会导致程序崩溃。用new运算符初始化它。

graph1 = new Graph();
// .......
delete graph1;

或使用诸如std::unique_ptr之类的智能指针来自动管理内存。

09-06 11:46