Dynamische Struktur
-
Hallo zusammen,
ich möchte in 'C' eine Struktur definieren, die eine Variable Anzahl von Integer-Werten beinhaltet.
Also sagen wir die Struktur besteht aus zwei Chars, einem Short und dann eine beliebige Anzahl von Integern, die aber erst zur Laufzeit bekannt wird.
Ich habe folgendes angelegt:struct mytest { char a; char b; short c; integer d[]; }
Wenn ich nun die Variable mytest_instance.d[0] = 10 initialisiere bekomme ich beim auslesen nur eine 0 zurück.
Irgendwie habe ich mir aber auch gedacht daß es so nicht geht. Hat da irgendwer eine Idee?Vielen Dank vorab.
Gruss Christian
-
Für das Element d wird natürlich kein Speicher reserviert, das musst du schon machen. z.B.:
// reserviert Speicher für struktur inklusive n Elemente in flexible array member struct mytest *mytest_create (size_t n) { struct mytest *new; new = malloc (sizeof *new + n*sizeof *(new->d)); return new; }
-
Bei unbekannter Speicherbedarf, benutze ich gerne die verkettete Liste.
Einfach ein void* Pointer auf das nächste Structobjekt in deine Struktur einfügen.
-
NeoMay schrieb:
Bei unbekannter Speicherbedarf, benutze ich gerne die verkettete Liste.
Einfach ein void* Pointer auf das nächste Structobjekt in deine Struktur einfügen.Würde ich auch machen, ich liebe verkettete Listen
Aber die Struktur muss über das Netzwerk verschickt werden. Habe ich vergessen zu erwähnen.Gruss Christian
-
das mit den variablen int werten kannst du mit malloc lösen
void init_struct(int anz, struct mytest *arg) { arg->d = malloc(anz * sizeof(*arg)); }
dafür müsstest du aber dein struct leicht abändern und zwar nach
struct mytest { char a; char b; short c; int *d; }
so sollte das mit der variablen anzahl gehen.
-
@ blups0r:
wirklich? Ich denke da wird über das Netzwerk nur der Zeiger verschickt, der Speicherbereich, auf den der Zeiger zeigt, verbleibt auf dem lokalen Rechner und wird nicht übertragen. Ich kann es ja mal probieren, aber...Gruss Christian