Zugriff auf static Variable über Zeiger



  • Hi,

    folgender code:

    #include <iostream>
    
    int* x;
    
    class test
    {
     public:
     static void sth()
     {
      static int i=5;
      x = &i;
     }
    };
    
    using namespace std;
    
    int main()
    {
        test::sth();
        cout << *x<< endl;
        return 0;
    }
    

    kann ein sollcher code funktionieren, oder ist das Ergebniss nicht definiert.
    Ich hab gerade das Problem, dass ich in meinem Projekt einige Klassen zu einem Singelton umbauen möchte und bekomm Laufzeitfehler. Und ich vermute, das es eben an sollchen Konstruktionen wie oben liegt.

    Muss ich dann den ganzen Code anpassen, so das auf das Objekt nicht mehr über Zeiger zugegriffen wird?



  • Also deine Funktion test::sth() sollte halt mal public sein - sonst lässt sie sich nicht aufrufen.
    Damit x überhaupt auf i zeigt solltest du test::sth() außerdem ausführen - sonst dereferenzierst du einen Zeiger, der irgendwo hin zeigt.
    Eine Initialisierung des Zeigers mit 0/NULL und dann eine Überprüfung, ob er schon auf ein Objekt zeigt wäre uU sinnvoll.



  • ok, dass hatte ich in dem beispiel jetzt vergessen. (Habs nachgetragen)

    aber prinzipiell sollte sowas funktionieren?!

    dann muss der fehler in meinem Programm wo anderes liegen.

    thx schonmal



  • Hi,

    alles im grünen Bereich 😉 Dein Fehler muss woanders liegen ...



  • KasF schrieb:

    Hi,

    alles im grünen Bereich 😉 Dein Fehler muss woanders liegen ...

    er hat seine fehler schon bereinigt, vorhin waren noch welche drin 😉


Anmelden zum Antworten