График ADT — Ошибка получения доступа

Я реализую Graph ADT для использования в другой программе, и мне дали эти функции «вставки» и «удаления», которые мне нужно было определить. Предполагается, что они создают Edge (из структуры Edge) с двумя вершинами и вставляют / удаляют его в большой граф. Он работает нормально, когда я создаю его экземпляр в main, но когда я пытаюсь вызвать функцию вставки или удаления, выдает ошибку, которая говорит:

Msgstr «Исключение первого шанса в 0x00A56C84 в COMP222 — Program3.exe: 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;
}

0

Решение

Проблема должна быть с этими двумя строками в функции вставки:

*newEdge->vertex1 = v1;
*newEdge->vertex2 = v2;

vertex1 а также vertex2 неинициализированные указатели, они не указывают на допустимые места в памяти, и вы пытаетесь записать в эти места. Я подозреваю, что вы хотите vertex1 а также vertex2 просто быть int, которые содержат идентификаторы вершин.

Аналогичная запись выполняется вашей функцией удаления. Вы должны это исправить тоже.

1

Другие решения

Других решений пока нет …