2016-07-04 14 views
0

静的に割り当てられた配列を使用してリングバッファを構築しようとしています(要件は既に​​ディナミカルであり、しかし、私はそれの内部にさまざまなサイズの配列をインスタンス化することができる汎用リングバッファ構造を持っていたいと思います。 は、私がこのような構造を持っている:構造体の初期化時にstruct内部で構造体を静的に初期化する

​​

私はで構造をインスタンス化:

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

は、私が代わりに構造そのもので、それを定義する、構造体のインスタンス化時に配列のサイズを定義することができます方法はありますか? 私は可能ではありませんが、私はそれを撃つでしょう。

+0

静的記憶期間はありますか? – 2501

+1

配列の代わりにポインタを使用し、配列が構造体の最後のメンバーである場合は、メモリを割り当てるときにそのサイズを決定できると思います。とにかく、sizeof(measurementsRingBuffer)の代わりに、すべてのメンバーの累積サイズ+ n * sizeof(double)を配列のサイズとします。 – Tim

+0

厳密なメモリ消費要件を持つリアルタイムシステムです。どのくらいのメモリが必要かを知る必要があります。 – omegasbk

答えて

5

あなたは配列へのポインタを使用することができます。それは、もし化合物のリテラルが関数の身体の外で定義されていることを

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

注:

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

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

あるいは化合物リテラル静的記憶期間を有する。

+0

ニース!これは正しいと思う、試してみる。どうもありがとう! – omegasbk

関連する問題