【问题标题】:How to initialize struct to safe values如何将结构初始化为安全值
【发布时间】:2017-09-13 09:59:43
【问题描述】:

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

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 * 找出我的问题,正如下面的人所说,我没有分配足够的内存。

【问题讨论】:

  • “正确值”是定义的概念。所以我们不能告诉你它是否正确。但是,您在分配后初始化它确实做了正确的事情。
  • 您需要说明如何调用函数以及如何声明sys 变量,否则没人能回答这个问题。也不清楚“安全值”是什么意思,这是应用程序级别的东西。

标签: c pointers malloc


【解决方案1】:

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

那么问题来了

    malloc(sizeof(list));

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

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

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2012-06-24
    • 2015-07-30
    • 2014-04-23
    • 2010-09-11
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多