首先,我创建了一个结构;
struct StarsStruct
{
int SerialNumber;
char StarName[10];
double x;
double y;
};
然后,我使用了创建了一个struct指针数组; (NumberOfStars只是一个int变量)在任何if语句之前,它在程序的顶部被声明和初始化。
struct StarsStruct *Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars);
我已经完成了一个for循环来改变我的struct数组中成员的值;
for (int i = 0; i < NumberOfStars; i++)
{
r1 = rand() % (60 + 1 - 0) + 0;
r2 = rand() % (30 + 1 - 0) + 0;
Stars[i].SerialNumber = i;
Stars[i].x = r1;
Stars[i].y = r2;
Plot(r1, r2, '.');
}
然而,当我转到我的第二个IF声明时,由于某种原因,这些值被完全删除;
完整部分代码;
if (strcmp(CurrentCommand, "bang") == 0)
{
Clear();
printf("Enter the number of stars to be created: ");
scanf("%d", &NumberOfStars);
//Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars);
for (int i = 0; i < NumberOfStars; i++)
{
r1 = rand() % (60 + 1 - 0) + 0;
r2 = rand() % (30 + 1 - 0) + 0;
Stars[i].SerialNumber = i;
Stars[i].x = r1;
Stars[i].y = r2;
Plot(r1, r2, '.');
}
}
else if (strcmp(CurrentCommand, "list") == 0)
{
Stars[0].SerialNumber;
Stars[1].y;
Stars[2].SerialNumber;
Stars[3].SerialNumber;
Stars[4].x;
Stars[5].y;
for (int i = 0; i < NumberOfStars; i++)
{
printf("%d", Stars[0].SerialNumber);
}
}
答案 0 :(得分:2)
注意: malloc()
会返回未经过内存的内存。引用C11
,章节§7.22.3.4
malloc
函数为大小和大小指定的对象分配空间 其价值是不确定的。
在else if
部分(当你到达那里时),你没有初始化成员,因为你没有进入负责分配值的if
块!
再次,C11
,章节§6.8.4.1,
在两种形式中,如果表达式比较不等于0,则执行第一个子语句。在
else
形式中,如果表达式比较等于0,则执行第二个子语句。[...]
如果您希望if
块中的值“可用”,则需要将分配部分移到else
条件之外。