2016-07-04 17 views
0

Ich versuche, einen Ring-Puffer mit statisch zugewiesenen Array zu erstellen (Anforderung, bereits gebaut dinamical, später beschlossen, statisch zu gehen). Ich hätte jedoch gerne eine generische Ring-Pufferstruktur, die es ermöglicht, verschiedene Größen von Arrays darin zu instanziieren. Ich habe diese Struktur:Statisches Initialisieren von Array innerhalb von Struct nach Struct-Initialisierung

typedef struct measurementsRingBuffer 
{ 
    int maxSize; 
    int currentSize; 
    double measurementsArray[MEAS_ARRAY_CAPACITY]; 
} measurementsRingBuffer; 

I instanziiert die Struktur von:

measurementsRingBuffer buffer = { .maxSize = MEAS_ARRAY_CAPACITY, .currentSize = 0 }; 

Gibt es eine Möglichkeit, Feldgröße auf struct Instanziierung definieren könnte, anstatt sie in ihrer Struktur zu definieren, selbst? Das klingt nicht möglich, aber ich werde es versuchen.

+0

Mit statischer Speicherdauer? – 2501

+1

Ich bin mir nicht sicher, aber wenn Sie einen Zeiger anstelle eines Arrays verwenden, und wenn das Array das letzte Mitglied Ihrer Struktur ist, dann denke ich, dass Sie über seine Größe entscheiden können, wenn Sie den Speicher reservieren. Wie auch immer, anstelle von sizeof (measurementsRingBuffer) haben Sie die kumulierte Größe aller Mitglieder plus n * sizeof (double) mit n die Größe Ihres Arrays – Tim

+0

Es ist Echtzeit-System mit strengen Speicherverbrauch Anforderungen. Es muss wissen, wie viel Speicher benötigt wird. – omegasbk

Antwort

5

Sie einen Zeiger auf ein Array verwenden:

typedef struct measurementsRingBuffer 
{ 
    int maxSize; 
    int currentSize; 
    double* measurementsArray ; 
} measurementsRingBuffer; 

double small_array[10]; 
measurementsRingBuffer small = { .maxSize = 10 , .measurementsArray = small_array } ; 

oder sogar eine Verbindung literal:

measurementsRingBuffer small = { .maxSize = 10 , .measurementsArray = (double[10]){ 0 } } ; 

beachte, daß die bei Verbindung literal außerhalb eines Körpers einer Funktion definiert wird, hat statische Speicherdauer.

+0

Schön! Das klingt richtig, ich werde es versuchen. Danke vielmals! – omegasbk

Verwandte Themen