Ich arbeite an einem Programm in C++, das mit Graphen befasst ist.Speicher schreiben Ausnahme beim Erstellen eines Diagramms
I speichern Graph als Adjazenzliste von Knoten, und ich habe die entsprechenden Strukturen in .h-Datei erklärt, wie folgt:
typedef struct Node {
int val;
struct Node * next;
} node;
typedef struct Graph {
int v;
node ** arr;
node ** arr2; // reserved list for a reversed directed graph.
} graph;
Ich habe eine Funktion für einen Graphen Initialisieren wie folgt definiert:
graph * creategraph(int v) { // v == number of vertices
int i;
graph * temp = (graph*)malloc(sizeof(graph));
temp->v = v;
for(i = 0; i < v; i++) {
temp->arr = (node**)malloc(v*sizeof(node*));
}
for(i = 0; i < v; i++) {
temp->arr[i] = NULL;
}
return temp;
}
ich nenne die Funktion, wie unten gezeigt ein Diagramm mit Anzahl der Ecken zu erstellen, die gleich num_vertices
:
graph * g = creategraph (num_vertices);
Mit num_vertices
gleich 200000
wird die Ausnahme "Access Violation Writing Location" in graph * createGraph
bei der ersten Ausführung von ausgelöst.
Könnte mir jemand sagen, was ist das Problem hier? Vielen Dank.
Bitte geben Sie weitere Einzelheiten an. Ich habe deinen Code ausprobiert und er läuft ohne Probleme sogar mit num_vertices = 999999 (obwohl die App ungefähr 10 GB RAM verbraucht hat). Wie viel RAM hast du? Vielleicht hast du keinen Widder mehr? Außerdem müssen Sie überprüfen, was malloc zurückgibt (wenn 0 zurückgegeben wird, wird der Speicher nicht zugewiesen und Sie müssen Ihre Schleifen stoppen). –