C struct mit array einer zur Laufzeit definierten Länge
-
Das sind meine ersten Schritte in C.
Ich versuche, eine Struktur zu erstellen, deren Member ein Array der Länge size ist. Das Problem bisher ist immer die Tatsache, dass size erst in der Laufzeit berechnet wird. Ich habe also#include <stdlib.h> int main() { struct test1 { int size; float farr[size]; }; struct test1* t; ... Funktionen (t) ... return 0; }
gcc meckert natürlich, 'size' sei unbekannt. In diversen Büchern/Tutorials habe ich nur Beispiele mit konstanten Arraygrößen gefunden
-
Hallo,
ich würde es wie folgt gestalten:
1. die Definition des struct nicht innerhalb einer Funktion
2. ich würde kein Array, sondern ein Pointer verwenden.
3. dazu würde ich eine funktion schreiben, die ein Element
von den struct anlegt (mit variable size)
4. und zu einer funktion wie (3.) braucht man dann auch eine,
die das element wieder löscht.#include <stdlib.h> #include <malloc.h> #include <string.h> struct test1 { int size; float *farr; }; static struct test1* new_test1(int size) { struct test1 *el = malloc(sizeof(*el)); el->size = size; el->farr = malloc(size * sizeof(*el->farr)); memset(el->farr, 0x0, size*sizeof(*el->farr)); return el; } static void del_test1(struct test1 *el) { if (!el) return; free(el->farr); free(el); } int main() { struct test1* t; t = new_test1(100); ... Funktionen (t) ... del_test1(t); return 0; }
Du kannst jetzt wie bei einen Array auf die Elemente vom
Array farr zugreifen.el->farr[5] = 3.1415;
So, ich hoffe, ich konnte dir ein wenig weiterhelfen.
Gruß mcr
-
mcr schrieb:
2. ich würde kein Array, sondern ein Pointer verwenden.
Oder auch die aus C99 bekannten flexible array members:
struct test1 { int size; float farr[]; };
Einfach mal danach googlen.