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 mitWü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
Bildbefindet. 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.- Mit dem
assertMakro, 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 ); }- 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 ) { ... } }
- Mit dem