我有一个函数需要将结构初始化为已知的安全状态。下面的代码是我到目前为止所做的,我认为这不正确或者可能,但是我如何正确地将结构初始化为安全值,因为它需要传递我的其余代码;
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 * 找出我的问题所在,正如下面的人所说,我没有分配足够的内存。
最佳答案
在您的代码中,list
是List *
类型的变量。对于指向 List
类型的指针,所需内存的大小为 List
类型,而不是指向 List
的指针。
所以,问题是
malloc(sizeof(list));
分配的内存比预期的要少。你需要
malloc(sizeof *list); // same as malloc(sizeof(List));
关于c - 如何将结构初始化为安全值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194499/