struct findaddress {
struct findaddress *next[11];
struct user *myuser;
};
int main(void){
struct findaddress *findhead=(struct findaddress *)(malloc(sizeof(struct findaddress)));
int i=0;
for (i;i!=11;i++){
if (findhead->next[i]==NULL)puts("success");else puts("fail");
}
return 0;
}
对我来说,令人不安的结果是:
fail
fail
success
success
success
success
success
success
success
success
success
我有没有想法为什么底部的两个指针失败,而其他指针正在传递。
有人可以这么善良地开导我吗?
答案 0 :(得分:5)
malloc()
不初始化内存,只分配堆上的空间。您看到的数组内容是随机的。它只是同一区域的先前内容。
如果要确保使用零初始化,请使用calloc()
。
答案 1 :(得分:2)
为什么你希望在这种情况下将任何东西初始化为任何东西? malloc
根本不会初始化已分配的内存,这基本上就是您在实验中观察到的内容。
如果要对结构对象进行零初始化,请执行
*findhead = (struct findaddress) { 0 };
在malloc
之后。或者,如果您希望您的内存充满物理全位 - 零模式,请使用calloc
而不是malloc
。
P.S。 i
第一部分for (i;i!=11;i++)
的目的是什么?如果您的i
已经预先初始化,则可以for (;i!=11;i++)
。