2016-05-13 3 views
-1

構造体のvecを作成したいと思います。これは私の構造体である:C:構造体のVec

typedef struct item { 
     char *name; 
     int acc; 
    } *Item; 

私が試した:

Item vec = (Item) malloc(sizeof(Item)*max); 

maxは以前に定義されています。私がすることで、このerror: initializer element is not constant

+5

typedef struct item {...} * Item; 'ひどい考えです。 –

+0

'sizeof(Item)'はポインタ型であると考えています。 –

+0

@EugeneSh。私のコメントが真実である理由の1つ。 –

答えて

1

変更それを得る:

typedef struct item { 
    char *name; 
    int acc; 
} Item; 

(なしポインタ)をし、その後はsizeof(構造体項目)またはのsizeof(項目)を行います。次に、

Item *vec = malloc(sizeof(Item) * max); 
+3

常に有効な単純な解決策は 'sizeof(* vec)'です。しかし、ポインタのtypedefはgenearalに問題があります。 –

+0

@iharob、あなたの声明に同意してください。 – rodolk

+1

[C言語でのキャストはありません](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) - このQ&Aを参照 –