Ich versuche, eine Variable aus einer externen Bibliothek in C++, Visual Studio 2010 zu definieren. Es funktioniert nur, wenn ich es außerhalb der Hauptfunktion ablegen.C++ - Probleme beim Definieren einer Variablen innerhalb der Funktion main()
Dieser Code stürzt:
#include "StdAfx.h"
#include <ogdf\basic\Graph.h>
#include <ogdf\basic\graph_generators.h>
int main()
{
ogdf::Graph g;
ogdf::randomSimpleGraph(g, 10, 20);
return 0;
}
Es gibt mir eine unhandheld Ausnahme: Zugriffsverletzung. Wenn es jedoch außerhalb Hauptfunktion ist, funktioniert es ohne Probleme:
#include "StdAfx.h"
#include <ogdf\basic\Graph.h>
#include <ogdf\basic\graph_generators.h>
ogdf::Graph g;
int main()
{
ogdf::randomSimpleGraph(g, 10, 20);
return 0;
}
Haben Sie, wie kann ich das Problem lösen? Ich nehme an, dass es durch irgendeine Art von Verknüpfungsproblem verursacht wird.
EDIT: Es sieht aus wie das Problem ist nicht die Initialisierung der Variablen. Es wird eine Ausnahme ausgelöst, wenn die Anwendung beendet wird.
int main()
{
ogdf::Graph g; // No problem
ogdf::randomSimpleGraph(g, 10, 20); // No problem
int i; // No problem
std::cin>>i; // No problem
return 0; // Throws an exception after read i;
}
Bezeichnen Sie Stapel:
Die Ausgabe lautet: Erste-Chance-Ausnahme bei 0x0126788f in graphs.exe: 0xC0000005: Zugriffsverletzung Schreibort 0x00000000.
Unbehandelte Ausnahme bei 0x0126788f in Grafiken.exe: 0xC0000005: Zugriffsverletzung beim Schreiben der Position 0x00000000.
Es hat wahrscheinlich etwas damit zu tun, dass globale Variablen Null initialisiert werden, während lokale Variablen unbestimmte Werte haben.Was passiert, wenn Sie 'g' explizit initialisieren, wenn es lokal deklariert wird? –
@JoachimPileborg: aber ogdf :: Graph ist eine Klasse und der Konstrukteur macht hoffentlich die Initialisierung. Dokumentation ist [hier] (http://www.ogdf.net/doc-ogdf/classogdf_1_1_graph.html) –
Können Sie auch den Stack-Dump posten. Es wäre interessant ** wo ** die Ausnahme ausgelöst wird und aufgrund welcher Adresse. – Flovdis