c++ - 推送到成员 vector 时出现段错误

标签 c++ vector segmentation-fault push-back

这是一个相对较小但存在段错误的项目。我搜索了很多做类似事情的帖子,虽然许多帖子似乎都遇到了同样的问题,但没有一个解决了我的问题。

基本问题是这样的:我有一个带有成员 vector 的对象 (myGraph) 和一些方法。另一个类中的方法调用 myGraph 的方法之一,该方法又调用另一个方法。在 that 函数内,对 myGraph 中的整数 vector 进行推送。但是,此推送会导致段错误。

在某种程度上,我一直在注释掉大部分代码(当然是在新分支上),并将代码减少到稀疏的几项。 ( 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

};

最佳答案

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

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

关于c++ - 推送到成员 vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966480/

相关文章:

c++ - opengl 平移与 glulookat

c++ - 强制具有相同属性的 vector 元素的优雅方式

c - 由于结构,for 循环中的段错误?

c++ - 双端队列错误

c++ - 在/C++ 中明智地追加数据列

在带有 VS2012/w Update 3 的 Windows 7 上构建的 C++ 程序无法在 WinXP SP3 上运行

c++ - 需要明确类模板中友元运算符+的自动返回类型推导

C++ - 在基于磁盘的 vector 中管理引用

c++ - 为什么这段代码不能按预期工作?

c - 太大的嵌套数组导致段错误(核心转储)