Problem mit "extern" Variable in Namespace
-
Ich arbeite mit Visual Studio und beim Ausführen meines Programmes bekomme ich eine Zugriffsverletzung beim Ort 0x00000000.
Ich habe die Codezeile sowie das mögliche Problem mit Google bereits gefunden, konnte allerdings noch keine Lösung finden.
Es scheint das die Liste g_SearchPaths zum Zeitpunkt wo ich probiere einen neuen Wert hinzuzufügen noch nicht initialisiert wurde.Nun zum Code:
Header Datei
namespace Filesystem { extern std::list<std::string> g_SearchPaths; extern void AddSource(std::string Path); }
CPP Datei
namespace Filesystem { std::list<std::string> g_SearchPaths; void AddSource(std::string Path) { g_SearchPaths.push_back(Path); // Löst die Zugriffsverletzung aus } }
Ich würde mich sehr über Hilfe freuen.
-
Laut Ideone geht das. Aber da liegt das alles in einem File.
Zeig mal mehr...
-
Stylaa schrieb:
Es scheint das die Liste g_SearchPaths zum Zeitpunkt wo ich probiere einen neuen Wert hinzuzufügen noch nicht initialisiert wurde.
Ja, so ist das bei globalen Variablen. Verwende einfach keine.
-
zum Zeitpunkt wo ich probiere einen neuen Wert hinzuzufügen
Der da wäre?
Sonst hört sich das nach dem static initialization order fiasco an.
-
@Skym0sh0: Bei dir wird es immer funktionieren, weil
It is implementation-defined whether the dynamic initialization of a non-local variable with static storage duration is done before the first statement of
main
. If the initialization is deferred to some point in time after the first statement ofmain
, it shall occur before the first odr-use (3.2) of any function or variable defined in the same translation unit as the variable to be initialized.g_SearchPaths
wird immer initialisiert sein, bevor duAddSource
das erste mal inmain
benutzt.Ich glaube eher, dass AddSource irgendwo vor
main
aufgerufen wird.
-
Mein Post war auch eher eine Aufforderung etwas mehr Info zugeben...
Kristallkugeln sind heutzutage nicht zuverlässig.