다른 프로그램에 사용할 Graph ADT를 구현하고 있으며 정의해야 할 "삽입"및 "제거"기능이 제공되었습니다. 그들은 두 개의 꼭지점이있는 Edge (Edge 구조체에서)를 만들고 더 큰 Graph에 삽입/제거해야합니다. 그것은 주에서 그것의 인스턴스를 만들 때 잘 실행되지만 삽입 또는 제거 함수를 호출하려고하면 오류 메시지가 나타납니다 :C++ - 그래프 ADT - 액세스 위반 가져 오기
"COMP222 - Program3.exe의 0x00A56C84에서 첫 번째 예외 : 0xC0000005 : 0xCDCDCDCD "액세스 위반 기록 위치.
어떤 오류가 발생했는지에 대한 의견이 있습니까? 다시, 주요 문제는 삽입/제거와 함께하지만, 나는 그것을 위해 나머지의 경우에 대비해 게시했다.
EDGE STRUCT
struct Edge { //edge with vertices v1 and v2
int *vertex1;
int *vertex2;
};
GRAPH.H
#include "Graph.h"
#include <iostream>
Graph::Graph() {
graphSize = 0;
};
Graph::Graph(const string& file) {
text.open(file);
while(!text.eof()) {
char ch;
text.get(ch);
vertices.push_back(ch);
}
for(int i = 0;i < sizeof(vertices);i++) {
static_cast<int>(vertices.at(i));
}
}
void Graph::insert(int v1,int v2) {
Edge* newEdge = new Edge;
*newEdge->vertex1 = v1;
*newEdge->vertex2 = v2;
v1 = vertices.at(0);
v2 = vertices.at(2);
graphSize += 2;
};
void Graph::remove(int v1,int v2) {
Edge* delEdge = new Edge; //edge to be deleted
*delEdge->vertex1 = v1;
*delEdge->vertex2 = v2;
delete delEdge->vertex1;
delete delEdge->vertex2;
graphSize -= 2;
};
ostream& operator <<(ostream& verts,const Graph& graph) {
return verts;
};
MAIN FUNCTION -- problem seems to be with the test.insert and test.remove functions
#include "Graph.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
Graph test("Path to file...no problem here..."); //THIS WORKS FINE
test.insert(2,3); //INSERT/REMOVE CAUSE THE ERROR
test.remove(2,3);
system("PAUSE");
return 0;
}
또한 제거 기능이 적합하지 않습니다. 새로운 모서리를 생성하고 새로 생성 된 모서리의 정점 포인터를 삭제하고 있습니까?! 나는 꼭지점이 v1, v2 인 모서리를 찾고 그 모서리를 삭제하겠습니까? – DigitalEye
예, 그게 무슨 뜻입니까? 그리고 vertex1과 vertex2를 일반 int로 변경하는 것이 좋습니다. 감사합니다. – jordpw
제거 기능이 변경되었습니다. 나는 가장자리를 저장하도록 정의 된 벡터를 가지고 있다는 사실을 잊어 버렸습니다. 그래서 가장자리를 검색하고 꼭지점이 일치하면 지워 버렸습니다. 이제는 모두 작동합니다. 당신의 도움을 주셔서 감사합니다! – jordpw