这是一个相对较小但是细分的项目。我搜索了很多做类似事情的帖子,虽然很多帖子似乎都有同样的问题,但没有一个能解决我的问题。
基本问题是:我有一个带有成员向量的对象(myGraph
)和一些方法。另一个类中的一个方法调用myGraph
的一个方法,这些方法又调用另一个方法。在 函数内部,推送myGraph
中的整数向量。但是,这种推动会导致段错误。
在一个极端的衡量标准中,我一直在评论大部分代码(当然是在一个新的分支上),并将我的代码减少到稀疏的几个项目。 (other posts似乎表明这种事情可能是由其他地方的错误代码造成的)但我仍然遇到了段错误。
以下是淡化文件,由尚未注释的少数内容组成。我说“淡化”因为很多声明(现在是空函数等)已被删除。如果您需要其他信息(例如,如果重要 - 不知何故 - 我在某个地方使用虚拟功能......作为一个激进的例子)请告诉我。
在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;
};
mygraph.h:
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
};
答案 0 :(得分:5)
不可避免的结论是成员指针myGraph* mymap
指向垃圾;你显然忽略了将它初始化为指向myGraph
对象。您需要创建一个对象,以便在CDispatcher
构造函数中引用它 - 即。,
CDispatcher(void) : mymap(new myGraph(1)) {}