2017-09-13 12 views
0

構造体を既知の安全な状態に初期化する必要がある関数があります。次のコードは私がこれまで行っている、私はこの正しいまたは多分、私は正しく私のコードの残りの部分を渡す必要があるので、私は正しく構造体を安全な値に初期化すると思います。構造体を安全な値に初期化する方法

Boolean sysON(FooSystem * sys) { 
    List * list = malloc(sizeof(list)); 

    sys->cash[0].denom = 1; 
    sys->cash[1].denom = 1; 
    sys->cash[2].denom = 1; 
    sys->cash[3].denom = 1; 
    sys->cash[4].denom = 1; 
    ... 

    sys->list = list; 
    sys->stockFileName = "bar.dat"; 

    return FALSE; 
} 

構造体は;

typedef struct Foo_system { 
    Coin cash[8]; 
    List * list; 
    const char * coinFileName; 
} FooSystem; 

またはその代わりに、私はmalloc関数(のsizeof(FOO))である必要がありsysON関数内の変数のすべての?

EDIT

私は次のコードPICES以上の4を持っている、それは私のプログラムをcrashs。

sys->cash[0].denom = 1; 
    ... 
    sys->cash[4].denom = 1; 

私のプログラムのcrashsと私は次のエラーを受け取る - * `./vm '内のエラー:munmap_chunk():無効なポインタ:0x0000000000d0c030 * が人物は以下の言ったように私の問題は、何であったかが分かりました私は十分なメモリを割り当てていませんでした。

+0

「正しい値」は*あなた*によって定義された概念です。それが正しいかどうかはわかりません。しかし、あなたはそれを割り当てた後でそれを初期化することによって正しいことをしました。 – StoryTeller

+0

関数をどのように呼び出すか、 'sys'変数がどのように宣言されているか、あるいは誰もその質問に答えることができないようにする必要があります。また、「安全な値」が何を意味するのかは明確ではなく、アプリケーションレベルのものです。 – Lundin

答えて

2

コードでlistは、タイプList *の変数です。 Listタイプへのポインタの場合、必要なメモリのサイズはListであり、ポインタはListではありません。

ので、問題は

malloc(sizeof(list)); 

予想より少ない方法でメモリを割り当てています。あなたが必要です

malloc(sizeof *list); // same as malloc(sizeof(List)); 
+1

より良い命名規則はここでOPに役立つかもしれません.... –

関連する問題