Verschachtelte Strukturen, Debugfehler
-
Ich bin mir nicht ganz sicher, ob man das noch als verschachtelt bezeichnet, aber zum eigentlichen Problem:
Das sind meine Strukturen:
struct struct1 { int i; int j; }; struct struct2 { int k; int l; }; struct struct3 { struct struct1 *str1; struct struct2 *str2; };Und hier weise ich etwas zu und will es ausgeben:
struct3 *str3; str3->str1->i = 5; std::cout << str3->str1->i << std::endl;Im Prinzip funktioniert das auch. Allerdings bekomme ich im Debug zur Laufzeit den Fehler
Run-Time Check Failure #3 - The variable 'str3' is being used without being initialized.Demnach müsste ja was in der Initialisierung von str3 falsch sein. Allerings weiß ich auch nicht was ich da anders machen soll.
-
struct i1 { }; struct i2 { }; struct foo { i1 a; i2 b; };int main() { foo my_foo; }oder brauchst du pointer für irgendetwas? falls ja: new/delete
bb
-
Du musst, wenn du einen Pointer verwendest gültigen Speicher bereitstellen. D.h. du benötigst new und delete. Entweder du verzichtest hier auf Pointer und schreibst dann:
struct struct1 { int i; int j; }; struct struct2 { int k; int l; }; struct struct3 struct struct1 str1; struct struct2 str2; };struct3 str3; str3.str1.i = 5; std::cout << str3.str1.i << std::endl;oder du arbeitest mit new im Constructor und delete im Destructor.
struct struct3 { struct struct1* str1; struct struct2* str2; struct3() { str1 = new struct1; str2 = new struct2; } ~struct3() { delete str1; delete str2; } }; int main() { struct3* str3 = new struct3; str3->str1->i = 5; std::cout << str3->str1->i << std::endl; delete str3; return 0; }Das Beispiel ist nicht vollständig, vorallem das ist wichtig.
-
Das ist für nichts bestimmtes. Manchmal versuche einfach mal was neues um daraus zu lernen.

bzw. ich dachte man macht das bei Strukturen einfach mit "Struktur *Pointer". Gilt das nur für einfache oder habe ich das was total falsch verstanden?

-
struct struct1 { int i; int j; }; /* nur eine Deklaration */ struct struct2 { int k; int l; }; /* nur eine Deklaration */ struct struct3 { struct struct1 *str1; struct struct2 *str2; };mit *str1 und *str2 hast Du nur Zeiger, die auf ein Objekt vom Typ struct struct1
zeigen KÖNNEN , die Pointer zeigen jedoch irgendwo hin, da
kein Speicher alloziert wurde.
-------------------------------------------------struct struct1 { int i; int j; }str1; struct struct2 { int k; int l; }str2; struct struct3 { struct struct1 str1; struct struct2 str2; }str3;Hier reserviert der Compiler Speicher für str1, str2 und str3
Zugriff über die Namen:
str3.str1.i=3;
str3.str2.k=5;Gruß
/edit pumuckl: cpp-Tags
-
Autsch
struct struct1
{
int i;
int j;
};struct struct2
{
int k;
int l;
};struct struct3
{
struct struct1 str1;
struct struct2 str2;
}str3;Das meinte ich eigentlich
-
Keksschleuder schrieb:
ich dachte man macht das bei Strukturen einfach mit "Struktur *Pointer". Gilt das nur für einfache oder habe ich das was total falsch verstanden?

Das hast du vermutlich falsch verstanden. Wenn die Struktur2 und 3 Teil deiner Struktur sind, dann macht man es komplett ohne Pointer. Nur wenn die Strukturen an anderer Stelle erzeugt wurden und mehrere Strukturen Referenzen auf die gleiche Struktur2/3 haben sollen, nimmt man Pointer (oder Referenzen).
@brummdings: demnächste bitte cpp-Tags benutzen
