在std :: vector

时间:2018-03-17 15:27:50

标签: c++ pointers graph dynamic-memory-allocation stdvector

以下代码应创建图表。为此,有两个类是边和图。 我们的问题是,该程序编译,但崩溃.. 在Visual Studio中给出错误,即存在读取访问冲突异常。

我们猜测,这来自指针e,因为这是错误的。但我们不知道究竟是什么问题。

问题:指针是程序崩溃的原因还是读取访问冲突异常?什么应该纠正?

我们将不胜感激任何帮助和代码更正。

CODE:

#include <iostream>
#include <vector>
#include <cassert>

using namespace std;

class edge {
public:
int s,t;
edge(int s, int t) : s(s), t(t) {}
};

class graph {
public:
int m,n;
vector<edge*> *e;
graph(int n, int m) : n(n), m(m) {
    for (int i=0; i<m; i++) {
        (*e).push_back(new edge(i,-1));
    }
}
~graph() {
    for(int i=m-1;i>=0; i--) {
        delete [] (*e)[i];
    }
}

void make_edge(int i, int s, int t) {
    for(i=0;i<m;i++) {
        assert(((*e)[i]->s!=s)&&((*e)[i]->t!=t));
    }
    assert(s!=t);
    assert(s+1==t);

}
};

int main() {
const int n=4;
const int m=3;
graph g(n,m);
g.make_edge(0,0,1);
g.make_edge(1,1,2);
g.make_edge(2,2,3);

return 0;
}

1 个答案:

答案 0 :(得分:4)

您的班级graph正在使用成员e,该成员指向类型std::vector<edge*>&#39;的类,但是此成员e之前未分配在构造函数中的用法。这就是崩溃的原因