我使用按位运算符来移动链表中的short的二进制值。该函数是递归的,并且在任意次数出现之后,我的右移似乎影响下一个链接中的short的值,尽管在该函数的这一点上我根本没有指向该链接。这是我的代码:
static void move_right(t_tetri *piece) {
int i;
i = 0;
piece->x_offset++;
while (i < piece->height) {
piece->shape[i] = piece->shape[i] >> 1;
i++;
}
}
int ft_solve(t_map *map, t_tetri *list) {
if (list == NULL) return (1);
while (list->y_offset + list->height <= map->size) {
while (list->x_offset + list->width <= map->size) {
if (put_tetri(map, list)) {
set_piece(map, list);
if (ft_solve(map, list->next)) return (1);
else unset_piece(map, list);
}
move_right(list);
}
reset_piece(list);
}
list->y_offset = 0;
return (0);
}
piece->shape
是一个包含4 short
的数组,但我最关心的是这里的第一个。在某些情况下(并非所有情况),当我通过move_right
函数时,piece->next->shape[0]
的值会以相同的方式移动,这对ft_solve的下一次递归造成了很大的问题。
有人会有任何想法吗?
如果有必要,我可以发布更多代码,我不会在这里提问,所以如果您需要更多信息,我可以随时添加。