指针数组的* *成员没有初始化为null


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

没有知道为什么底部的两个指针失败,而其他指针通过。

有谁能开导我一下吗?

malloc()不初始化内存,只在堆上分配空间。您看到的数组内容是随机的。它只是相同区域的先前内容。

使用calloc(),如果你想确保它初始化为零。

为什么您期望在这种情况下将任何东西初始化为任何东西?malloc根本不初始化分配的内存,这基本上是你在实验中观察到的。

如果你想零初始化你的struct对象,执行

*findhead = (struct findaddress) { 0 };
malloc

。或者,如果您希望您的内存被物理的全位零模式填充,请使用calloc而不是malloc

注:for (i;i!=11;i++)第一部分的i的目的是什么?如果您的i已经预先初始化,您可以只执行for (;i!=11;i++)

相关内容

  • 没有找到相关文章

最新更新