按位右移影响另一个短路

时间:2016-12-14 23:00:26

标签: c linked-list bit-manipulation bitwise-operators bit-shift

我使用按位运算符来移动链表中的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的下一次递归造成了很大的问题。

有人会有任何想法吗?

如果有必要,我可以发布更多代码,我不会在这里提问,所以如果您需要更多信息,我可以随时添加。

0 个答案:

没有答案