On Wednesday 15 August 2001 14:53, Matthias Petermann wrote:
ich habe mich gerade ein bisschen mit Strukturen beschäftigt und habe ein Problem, das mich ein bisschen verwirrt. Ich wollte ein Array von 20 Strukturen erzeugen, auf dessen Elemente ich dann auf die Art "menu[1].zustand=1" zugreifen kann. Mein angehängtes Programm soll das mit einer Zeichen- kette demonstrieren. Allerdings erhalte ich vom Compiler die Fehlermeldung:
main.c: In function `main': main.c:21: request for member `beschreibung' in something not a structure or union main.c:28: parse error at end of input
Meine Frage: muss ich bei einer Struktur _jedes_ Element einzeln mit malloc allozieren oder was hab ich übersehen?
Nein Du musst sie alle _gleichzeitig_ allozieren.
Ausserdem sind Pointer (*) und array ([..]) einigermaßen äquivalente Typen. Der Unterschied ist einfach, dass Du bei Pointern mit malloc rangehst und bei Arrays dem Compiler von Anfang an sagst, wieviel Speicher Du brauchst. Du musst Dich also für eine Variante entscheiden. In Deinem Fall hattest Du folgendes gemacht:
1. Du hast einen Pointer auf ein Array angelegt. 2. Du hast versucht das erste Element auf das der Pointer zeigt zu dereferenzieren und ihm neuen Speicher zuzuweisen, was aber gleich zwei Haken hatte: a) die Dereferenzierung eines Pointers auf Array ergibt Array und Arrays kann man keinen neuen Speicher zuweisen (man hat schließlich explizit den Compiler als dafür zuständig deklariert, indem man ein Array genommen hat) b) der Pointer hatte noch keinen Speicher zugewiesen bekommen und soetwas zu dereferenzieren bringt das Program meistens ins Datennirvana.
Ansonsten kannst Du Pointer und Array identisch behandeln. Siehe Anhang.
Übrigens: Du solltest mit malloc geholten Speicher auch mit free wieder freigeben. Wenn das Programm nicht gerade nur für wenige Millisekunden läuft verbraucht das sonst unnötig Speicher.
Konrad