所以我有这个问题。我初始化了我的结构数组的一个参数,然后我想在另一个函数中检查它。我检查了,地址与 main() 中的地址相同,但 vaule 只是随机的。不知道为什么,求助!
int i;
STOL s[STOLY];
char choice[MAXSTRING] = "jupiiiii", ***p;
/*if ((p = (char ***) malloc(MAXSTRING * sizeof(char **))) == NULL)
exit(-5);*/
for (i = 0; i < STOLY; i++)
s[i].novy = 0;
while (strcmp(choice, "stop"))
{
puts("Casnik alebo bar?");
/* *p = nacitaj_choice();
choice = *p;*/
nacitaj_choice(choice);
free(p);
if (strcmp(choice, "casnik") == 0)
zadaj_stol(0, &s); /*HERE I SEND THE ADDRESS*/
if (strcmp(choice, "bar") == 0)
zadaj_stol(1, &s);
}
我想在另一个函数中检查novy
void zadaj_stol(int typ, STOL *p_s[STOLY])
{
int stol;
printf("Stol cislo: ");
stol = (cislo_stola() - 1);
if (!p_s[stol]->novy) /*HERE IS THE PROBLEM*/
reset_stol(p_s[stol]);
zadaj_udaj(typ, p_s[stol]);
vypis_stol(p_s[stol]);
}
我查了一下,p_s 和 &s 是一样的,但是出于某种原因 p_s[stol]->novy 总是像 -3782126 这样的东西。顺便说一句,stol 介于 0 和 13 之间
因为我还不能回答我的问题,所以这是我想出的部分解决方案。问题是,它只有在 p_s 的索引为 0 时才有效,即 p_s[0]->novy 工作正常,但 p_s[1] 给出调用堆栈,它不知道地址。我不确定为什么。
int main()
{
int i;
STOL s[STOLY], **p_s;
if ((p_s = (STOL **) malloc(sizeof(STOL))) == NULL)
return -5;
*p_s = s;
char choice[MAXSTRING] = "jupiiiii";
for (i = 0; i < STOLY; i++)
s[i].novy = 0;
while (strcmp(choice, "stop"))
{
puts("Casnik alebo bar?");
nacitaj_choice(choice);
if (strcmp(choice, "casnik") == 0)
zadaj_stol(0, p_s);
if (strcmp(choice, "bar") == 0)
zadaj_stol(1, p_s);
}
return 0;
}
void zadaj_stol(int typ, STOL **p_s)
{
int stol;
printf("Stol cislo: ");
stol = (cislo_stola() - 1);
if (!p_s[stol]->novy)
reset_stol(p_s[stol]);
zadaj_udaj(typ, p_s[stol]);
vypis_stol(p_s[stol]);
}