i具有一个函数,需要将结构初始化为已知的安全状态。以下代码到目前为止我所做的事情,我认为这是不正确的,或者也许,但是我该如何正确地将结构置于安全值,因为它需要围绕我的其余代码传递;
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;
还是我应该是syson函数中所有变量的malloc(sizeof(foo))?
编辑
当我有以下代码中的4个以上时,它会崩溃我的程序;
sys->cash[0].denom = 1;
...
sys->cash[4].denom = 1;
我的程序崩溃,我收到以下错误 - *错误中的错误:./vm':munmap_chunk():无效指针:0x00000000000000D0C030 * 发现我的问题是什么,正如人们在下面所说的那样,我没有分配足够的记忆。
在您的代码中, list
是类型List *
的变量。对于指向List
类型的指针,所需的内存是类型List
的大小,而不是指针到List
。
所以,问题是
malloc(sizeof(list));
分配的内存比预期的要少。您需要
malloc(sizeof *list); // same as malloc(sizeof(List));