以下代码应创建图表。为此,有两个类是边和图。 我们的问题是,该程序编译,但崩溃.. 在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;
}
答案 0 :(得分:4)
您的班级graph
正在使用成员e
,该成员指向类型std::vector<edge*>
&#39;的类,但是此成员e
之前未分配在构造函数中的用法。这就是崩溃的原因