dynamisches Array in einer struct

Gast #1179117
Lesenswert?
• ▲
▼
Hallo,
ich möchte einen Datensatz über die Serielle schicken.
In diesem Datensatz soll das Datenarray variable Größe haben.
Bzw am Anfang einer Funktion mit der richtigen Größe initialisiert 
werden.

die Sendefunktion sendet immer alle bytes der struct mit einem Zeiger.
Die Anzahl der zu sendenden bytes wird mit sizeof ermittelt.
1
typedef struct{
2
    uchar header;
3
    uchar command;
4
    uchar daten[?];
5
    uint crc;
6
}
Kann man das irgendwie machen?

Wenn ja wie Innitialisiert man solch einen Datensatz während der 
laufzeit für verschiedene Datenarraygrößen?

danke für Hilfe
#1179141
Lesenswert?
• ▲
▼
Dynamische Puffergrößen zu verwalten ist sehr aufwendig und man bekommt 
leicht Probleme mit Speicherverschnitt. Die daraus resultierenden Fehler 
sind auf Systemen mit kleinem Arbeitsspeicher kaum zu beheben und haben 
zudem die Eigenart, sporadisch aufzutreten und schwer reproduzierbar zu 
sein.

Deswegen ist die bessere Lösung, die maximal notwendige Pufferlänge zu 
bestimmen und einen Struct zu definieren, der als letztes Element diesen 
Puffer enthält.

Das CRC-Feld würde ich entweder vor den Puffer legen, oder dynamisch 
nach dem Füllen des Puffers hinter das Ende der Daten schreiben.

Zudem funktioniert die Abfrage der Länge auf keinen Fall mit sizeof. Das 
Resultat für sizeof muß dem Compiler bekannt sein sein - was es per 
definition bei einem dynamischen Puffer nicht sein kann.

Deswegen muß in den struct auch noch ein Längenfeld, also etwa so:
1
typedef struct{
2
    uchar header;
3
    uchar command;
4
    uchar length;
5
    uint crc;
6
    uchar daten[MAX_BUFLEN];
7
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren