arry über zeiger an strucktur übergeben
-
Autsch. Da machst du aber ganz schön viele Annahmen über Bytesex, struct alignment und den Aufbau des Stacks. Sowas kann auf bestimmten Architekturen und mit bestimmten Compilern hinhauen, tut es aber bei weitem nicht immer.
Für mich stellt sich aber auch die Frage, warum du da ein struct und nicht gleich ein Array benutzt.
-
wie meinst du das?
-
Naja, so wie ich das sehe, ist dein struktur_typ im Grunde nur ein umständlich ansprechbares Array, also kannst du auch gleich ein Array benutzen. Wenn das struct noch mehr member hat, hilft dir wahrscheinlich so eine Konstruktion:
typedef struct { unsigned long feld[5]; /* weitere member */ } struktur_typ; /* ... */ struktur_typ s; s.feld[0] = 3; s.feld[1] = 1; /* ... */
-
Irgendwie hast du ja damit recht...
Der Sinn der in dieser Sache ist, ist das ich mir in der strucktur verschiedene eindeutige Namen vergeben kann die ich eine Visu weitergebe.
und mit dem array im Programm selber diese Daten schon und einfach bearbeiten kann!jetzt such ich halt eine schöne verbindung ohne mit einzelnen Zeiger die Unterelemente zuzuweisen.
Die Idee mit Union fand ich gut! nur leider macht sie Probleme bei meinem ProgrammHabt Ihr denn noch irgendwelche?
Gruß
-
Wie ist es damit:
enum { eins = 1, zwei = 2, drei = 3, vier = 4, fuenf = 5 }; typedef struct { unsigned long feld[5]; /* weitere member */ } struktur_typ; /* ... */ struktur_typ s; s.feld[eins] = 3; s.feld[zwei] = 1; /* ... */
-
die idee ist nicht schlecht....
was genau macht enum? ähnlich define?muß mal versuchen, glaube aber in meiner visu kann ich ein array nur nach nummern auslesen
-
mabusps schrieb:
Die Idee mit Union fand ich gut! nur leider macht sie Probleme bei meinem Programm
Was für Probleme??
-
die idee ist nicht schlecht....
was genau macht enum? ähnlich define?muß mal versuchen, glaube aber in meiner visu kann ich ein array nur nach nummern auslesen
-
AJ schrieb:
mabusps schrieb:
Die Idee mit Union fand ich gut! nur leider macht sie Probleme bei meinem Programm
Was für Probleme??
Ich bekomme immer diese Fehlermeldung
(28):Fehler: Es existiert kein Datentyp für das Symbol "werte1".und kann noch nicht wirklich etwas mit anfangen....
-
Ne enum definiert ne Aufzählung. Es ist schon was anderes als #define, weil es nicht vom Präprozessor aufgelöst wird und weil du damit neue Typen definieren kannst, also etwa:
typedef enum { eins, zwei, drei } zahl; zahl x = zwei;
Aber in diesem Fall ist die Anwendung die selbe.
-
mabusps schrieb:
oder geht die ganze idee nicht da eine strucktur nicht zwingend im speicher
hintereinander liegt?ausserdem können füllbytes in den structs stecken.
aber die kriegt man mit '#pragma pack(1)' weg.
-
Eine union funktioniert ähnlich wie eine Struktur, nur dass die Elemente jeweils auf den gleichen Speicherbereich nutzen.
Kannst du bitte auch den Quellcode zum Fehler zeigen? So ist es etwas schwer ihn zu analysieren ;).
-
pragmas sind nicht portabel; wenn du jemals auf nen anderen Compiler umsteigen willst, kannste solchen Code wegschmeißen.
-
0xdeadbeef schrieb:
pragmas sind nicht portabel;
stimmt, mit ausnahme von 'pack'. das können fast alle, selbst so exoten wie greenhills.
-
Mag sein, dass viele (nicht alle) #pragma pack können, aber du hast keine Garantie, dass es für verschiedene Compiler genau die selbe Syntax hat und sich genau gleich verhält. Sich darauf zu verlassen wäre zumindest sehr schlechter Stil - ganz abgesehen davon, dass es das das Problem mit dem Bytesex immer noch nicht löst.
-
0xdeadbeef schrieb:
ganz abgesehen davon, dass es das das Problem mit dem Bytesex immer noch nicht löst.
Wer mit Bytes Sex hat, dem ist eh nicht mehr zu helfen...
-
Hallo,
weiss jeman ob der pragma pack auch auf dem g++ zu kompilieren geht und das Gleiche Verhalten hat?
Wie könnte man pragma pack noch implementieren, um das Verhalten ohne pragma zu bekommen.
Das Problem ist, ich versteh die Bedeutung von pack (push/pop) nicht einmal wirklich :-S
-
Nach langer Suche habe ich das hier gefunden:
__attribute__ ((aligned (ALIGNMENT)))Dies soll scheinbar das Gleiche wie #pragma pack bewirken, beim gcc!
Kann das jemand bestätigen oder kennt jemand was anderes?
Danke schon Mal!
-
Also so wie ich das Sehe muss man den gcc Kram hiter jeden struct packen und kann das nicht allgemein für alle verwenden.
Oder eben durch push auf den Compilerstack packen wie mit pragma....