*指针数组的某些*成员未初始化为null?

时间:2013-06-17 03:49:04

标签: c linked-list malloc

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

我有没有想法为什么底部的两个指针失败,而其他指针正在传递。

有人可以这么善良地开导我吗?

2 个答案:

答案 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++)