2017-08-21 16 views
0

cを使用して、構造体の配列にstuffを入力しようとしていて、その配列がいっぱいになると、配列のサイズを2倍にしてreallocを使い続けます。構造体の配列を再割り当てする方法

私は、これはすでに尋ねたが、私は、私は私の配列これらの質問がやった方法を作成していないと少し混乱取得していますので、誰かが明確にそれを説明することができ期待していたようにいくつかの質問があったことを知っています。

私は構造体

struct Data { 
    // Some variables 
} 

を持っており、reallocのために

struct Data entries[100]; 
int curEntries = 100; 
int counter = 1; // index, I use (counter - 1) when accessing 

を使用して配列を初期化、私は現在

if(counter == curEntries){ // counter = index of array, curEntries = total 
    entries = realloc(entries, curEntries * 2); 
} 

を使用している私は私がのreallocをキャストする必要があります知っています多分正しい?私はどれだけか、どのような私はそれをキャストするためのものだか分からないので、私は現在、「配列型で表現への割り当て」もちろん私にエラーを与えるものを、持っていない

ありがとう!

+0

。そのようにそれにキャストしてみてください(2 * curEntries、(構造体データ*)エントリ) 'エントリ=(構造体データ*)reallocを、さらに' –

+0

、私は一般的に 'malloc'とペアになって、この(ヒープに割り当て代わりのを見てきましたスタック)。なぜあなたはそれを使用していないのですか? –

+0

配列は 'realloc'することはできません。 '構造体のデータエントリ[100];' - > '構造体データ*エントリ=のmalloc(100 *はsizeof *エントリー);' – BLUEPIXY

答えて

2
struct Data entries[100];// memory is already allocated to this 

あなたは次のようにポインタとしてentriesを宣言する必要があります:あなたが扱っているタイプは、 `Data`を構造体です

struct Data *entries=NULL; 
entries = malloc(curEntries * sizeof(struct Data)); 
//When its time to reallocate 
entries = realloc(entries, (curEntries * 2 * sizeof(struct Data))); 
+1

イディオム 'old_ptr = realloc(old_ptr、new_size)'は起こるのを待っているメモリリークです。正しいイディオムは 'new_ptr = realloc(old_ptr、new_size);です。 if(new_ptr == NULL){...ハンドルがメモリ不足...} old_ptr = new_ptr; '。 –

関連する問題