我嘗試使用多線程來完成一個項目,但我不太熟悉void *
以及如何使用它。 我有此功能的問題:解除引用'void *'指針並強制轉換不起作用
void *find_way_out(void *tree)
{
int i;
t_tree *tmp;
t_tree **road;
int j;
int th_nbr;
th_nbr = tree->thread_nbr;
j = 0;
road = xmalloc(sizeof(t_tree));
i = 0;
tmp = (t_tree *)tree;
road[j] = tmp;
tmp->visited[th_nbr] = 1;
while (1)
{
while (tmp->leaf[i] != NULL)
{
printf("room : %s && room next %s\n", tmp->room, tmp->leaf[i]->room);
if (tmp->leaf[i]->visited[th_nbr] == 0)
{
road[++j] = tmp;
tmp = tmp->leaf[i];
tmp->visited[th_nbr] = 1;
i = -1;
printf("going to room-> %s\n", tmp->room);
}
if (tmp->type == END)
{
printf("find end...\n");
pthread_exit(&j);
}
i++;
}
tmp = road[j];
if (--j == -1)
pthread_exit(0);
i = 0;
printf("backing to room %s\n", tmp->room);
}
pthread_exit(0);
}
的錯誤是在行: th_nbr = tree->thread_nbr;
thread_nbr
是我的結構樹中的一個整數。
我編譯時有這些錯誤:
sources/find_way.c:21:16: warning: dereferencing ‘void *’ pointer
th_nbr = tree->thread_nbr;
^
sources/find_way.c:21:16: error: request for member ‘thread_nbr’ in something not a structure or union
你有一個想法解決它? 謝謝。
「......並且演員不工作」 - 你的演員在哪裏? – Mat
指定void *樹到適當的結構,然後嘗試使用它。 –
你正在泄漏'路'。 –