c - 如何将结构初始化为安全值

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

最佳答案

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

所以,问题是

    malloc(sizeof(list));

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

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

关于c - 如何将结构初始化为安全值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194499/

相关文章:

c - 如何打开文件以在单独的函数中读取而不会出现段错误?

python - 如何在 cython 的结构中使用文件指针

c# - 将字节引用从 c# 传递到非托管 cpp COM dll

c - 函数返回一些指针为 NULL

c - 使用 malloc 时出错

c - 包含动态数组的不透明 C 结构

Code::Blocks error .exe 已停止工作

c - sprintf 在 C 中前导零填充

c - 指针需要比理论上更多的内存分配

c - malloc 之后的空闲内存分配