如何将struct初始化为安全值

时间:2017-09-13 09:59:44

标签: c pointers malloc

我有一个需要将结构初始化为已知安全状态的函数。以下代码到目前为止我做了什么,我不认为这是正确的或者可能,但是我如何正确地将结构初始化为安全值,因为它需要传递给我的其余代码;

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函数中的所有变量?

修改

如果我有超过4个以下代码,它会导致程序崩溃;

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

我的程序崩溃,我收到以下错误 - * ./vm'出错:munmap_chunk():指针无效:0x0000000000d0c030 *  发现我的问题是什么,正如下面的人所说,我没有分配足够的内存。

1 个答案:

答案 0 :(得分:2)

在您的代码中,listList *类型的变量。对于指向List类型的指针,所需内存的大小为List,而不是指向List的指针。

所以,问题是

    malloc(sizeof(list));

分配比预期更少的内存。你需要

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