C++ 推送到成员向量时出现SEGFULT

C++ 推送到成员向量时出现SEGFULT,c++,vector,segmentation-fault,push-back,C++,Vector,Segmentation Fault,Push Back,这是一个相对较小但有断层的项目。我已经搜索了很多做类似事情的帖子,虽然很多帖子似乎都有相同的问题,但没有一个能解决我的问题 基本问题是:我有一个带有成员向量的对象(myGraph)和一些方法。另一个类中的方法调用myGraph中的一个方法,该方法反过来调用另一个方法。在该函数中,对myGraph中的整数向量进行推送。但是,此推送会导致segfault 在某种程度上,我已经注释掉了大部分代码(当然是在一个新的分支上),并将代码减少到了稀疏的几项。(似乎表明这类事情可能是由其他地方的坏代码引起的)但

这是一个相对较小但有断层的项目。我已经搜索了很多做类似事情的帖子,虽然很多帖子似乎都有相同的问题,但没有一个能解决我的问题

基本问题是:我有一个带有成员向量的对象(
myGraph
)和一些方法。另一个类中的方法调用
myGraph
中的一个方法,该方法反过来调用另一个方法。在该函数中,对
myGraph
中的整数向量进行推送。但是,此推送会导致segfault

在某种程度上,我已经注释掉了大部分代码(当然是在一个新的分支上),并将代码减少到了稀疏的几项。(似乎表明这类事情可能是由其他地方的坏代码引起的)但我仍然有一个错误

接下来是经过淡化的文件,由少数未注释的内容组成。我之所以说“淡化”,是因为很多声明(现在是空函数之类的)都被删除了。如果您需要其他信息(例如,如果我在某处使用虚拟函数(作为一个激进的例子)很重要,请告诉我

在Dispatcher.h中:

class myGraph;

class CDispatcher
{
public:
    CDispatcher(void);
    ~CDispatcher(void);

    void ProcessCall(string buf);

    myGraph* mymap;

};
在Dispatcher.cpp中:

void CDispatcher::ProcessCall(string buf) 
{
    mymap->getDistance(0,1);
};
在mygraph.cpp中:

int myGraph::getDistance(int start, int end) {
    Dijkstras(start,end);

    // This is just to return something
    return 5;
};

vector<int> myGraph::Dijkstras(int startVert,int endVert) {

    vertices_i.push_back(2); // This line results in a segfault
    cout << "push successful" << endl;

    // This is just to return something
    vector<int> unvisited;
    return unvisited;
};
int-myGraph::getDistance(int-start,int-end){
迪克斯特拉斯(起点、终点);
//这只是为了回报一些东西
返回5;
};
向量myGraph::Dijkstras(int startVert,int endVert){
顶点_i.向后推_(2);//这条线导致一个分段故障

cout不可避免的结论是成员指针
myGraph*mymap
指向垃圾;您显然忽略了初始化它以指向
myGraph
对象。您需要创建一个对象,以便它在
CDispatcher
构造函数中引用——即


请显示
CDispatcher(void);
它是一个空构造函数。我需要一些东西吗?是的,你需要:):)看看下面的欧内斯特的答案……是的,你说对了:)太感谢了!啊,这很有意义。添加了这个,得到了一个错误,并添加了一个int(myGraph的构造函数中需要一个int,我正要拉奎特哈哈)它就像一个符咒。谢谢!现在请原谅,我去复习指针的第一章第一节:“指针不是对象。”——“真不敢相信我花了这么长时间,删除了那么多代码,仍然没有弄明白。”(
typedef struct edge
{
    int endVert;
    int weight;
} edge;


typedef struct vertex
{
    long dist;
    bool visited;
    int prev;

    vector<edge> edges;
} vertex;
class myGraph
{
public:
    myGraph(int initSize);
    ~myGraph(void);

    int getDistance(int start, int end);
    vector<int> Dijkstras(int startVert,int endVert);

    //vector<vertex> vertices; // The original vector that was segfaulting
    vector<int> vertices_i; // Simpler vector, of just ints. Still segfaults

};
CDispatcher(void) : mymap(new myGraph(1)) {}