If you look at this code, everythink works just fine.
Code:
int filter_all_legal_moves(BOARD_STATE* pboard_state, MOVE_DATA* pmove_data){ //check all moves
for(int i = 0; i < pmove_data->used_array_size; i++){
BOARD_STATE bstate = make_move_with_copy(pboard_state, pmove_data->moves[i]);
MOVE_DATA new_move_data = return_all_moves(&bstate, 0);
if(can_king_be_killed(&bstate, &new_move_data)){
pmove_data->moves[i] = "\0\0";
}
}
int i = -1;
int p = -1;
while(1){
i++;
do ++p; while(p < pmove_data->used_array_size && pmove_data->moves[p] == "\0\0");
if (p >= pmove_data->array_size) break;
pmove_data->moves[i] = pmove_data->moves[p];
}
pmove_data->used_array_size = i;
//check e.p
//check castling
return 1;
}
Now let us write the code like this:
Code:
int filter_all_legal_moves(BOARD_STATE* pboard_state, MOVE_DATA* pmove_data){ //check all moves
for(int i = 0; i < pmove_data->used_array_size; i++){
BOARD_STATE bstate = make_move_with_copy(pboard_state, pmove_data->moves[i]);
MOVE_DATA new_move_data = return_all_moves(&bstate, 0);
if(can_king_be_killed(&bstate, &new_move_data)){
pmove_data->moves[i] = "\0\0";
}
}
int i, p = -1;
while(1){
i++;
do ++p; while(p < pmove_data->used_array_size && pmove_data->moves[p] == "\0\0");
if (p >= pmove_data->array_size) break;
pmove_data->moves[i] = pmove_data->moves[p];
}
pmove_data->used_array_size = i;
//check e.p
//check castling
return 1;
}
The debugger tells me i = 7 after initalization...
Why?