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.


  • Mod

    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.


  • Mod

    @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 of main , 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 du AddSource das erste mal in main 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.


Log in to reply