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