Problem mit Strings in einer Struktur mit Pointer



  • Heyho Leute ich weiss einfach nicht wie ich aus dem Hauptprogramm auf den String in einer Struktur zugreifen kann wenn ich Pointer benutze

    Hier mein Ansatz
    struct Bild
    {
    string Test;
    };

    In main:
    Bild eins*;
    eins->Test="Hallo Leute");

    Das Programm kompiliert zwar stürzt darauf aber sofort ab.
    Wenn ichs ohne Pointer mache also mit
    Bild zwei
    zwei.Test="Hallo Leute";
    funktioniert es aber halt nicht mit

    Würde mich freuen wenn mir wer helfen kann
    Mfg
    Tollmer



  • Bild b;
    Bild* mein_bild = &b;
    mein_bild->Test = "Hallo, Welt";
    


  • struct Bild 
    { 
       string Test; 
    }; 
    
    int main()
    {
       Bild eins*; 
       eins->Test="Hallo Leute"); 
    }
    

    Du definierst nur einen Zeiger, aber sein Wert ist undefiniert. Das heißt, er zeigt irgendwo in den Speicher, wo sich mit allerhöchster Wahrscheinlichkeit kein Objekt vom Typ Bild befindet. Deswegen stürzt dein Programm ab, bzw. es erzeugt undefiniertes Verhalten, das zufällig zum Absturz führt.
    Bei Zeigern musst du selbst dafür sorgen, dass sie auf ordentlich initialisierte Objekte zeigen. Normalerweise benutzt man zwei Mechanismen, um auf gültige Zeiger zu prüfen. Mit Gültigkeit meine ich hier einen Wert != 0 oder ungleich nullptr für C++11. Nichtinitialisierte Zeiger sind in den allermeisten Fällen gültiger Zeiger, weil sie einen Wert != 0 haben. Das bedeutet allerdings nicht, dass sie auf ein gültiges Objekt zeigen, daher sollte man Zeiger immer direkt mit einem gültigen Objekt oder 0 initialisieren.

    1. Mit dem assert Makro, wenn der Zeiger zwingend gülitg sein muss. Das Makro ist nur im Debug Modus aktiv und führt zur Laufzeit zu einer Meldung und Programmabbruch, wenn der Zeiger ungültig ist.
    void func( Obj* obj )
    {
       assert( obj );
    }
    
    1. Explizite Überprüfung auf Gültigkeit. Das ist notwendig wenn z.B. ein Parameter optional ist und daher auch 0 sein darf:
    void func( Obj* obj )
    {
       if( obj )
       {
          ...
       }
    }
    

Anmelden zum Antworten