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++)
。