我正在编写自己的俄罗斯方块版本。在创建blockRotation方法时,我遇到了memcpy的怪异问题。在第二次调用blockRotate的过程中,即使bool [4 * 4]数组生成正确,也无法保存它。怎么了?

这是我的错误日志:

arr_shift[0]: true
arr_shift[1]: false
arr_shift[2]: false
arr_shift[3]: false
arr_shift[4]: true
arr_shift[5]: true
arr_shift[6]: false
arr_shift[7]: false
arr_shift[8]: true
arr_shift[9]: false
arr_shift[10]: false
arr_shift[11]: false
arr_shift[12]: false
arr_shift[13]: false
arr_shift[14]: false
arr_shift[15]: false
arr_rot[0]: false
arr_rot[1]: false
arr_rot[2]: true
arr_rot[3]: false
arr_rot[4]: false
arr_rot[5]: false
arr_rot[6]: true
arr_rot[7]: true
arr_rot[8]: false
arr_rot[9]: false
arr_rot[10]: true
arr_rot[11]: false
arr_rot[12]: false
arr_rot[13]: false
arr_rot[14]: false
arr_rot[15]: false
shape[0]: true
shape[1]: false
shape[2]: false
shape[3]: false
shape[4]: true
shape[5]: true
shape[6]: false
shape[7]: false
shape[8]: true
shape[9]: false
shape[10]: false
shape[11]: false
shape[12]: false
shape[13]: false
shape[14]: false
shape[15]: false


arr_shift[0]: false
arr_shift[1]: false
arr_shift[2]: false
arr_shift[3]: false
arr_shift[4]: false
arr_shift[5]: false
arr_shift[6]: false
arr_shift[7]: false
arr_shift[8]: false
arr_shift[9]: false
arr_shift[10]: false
arr_shift[11]: false
arr_shift[12]: false
arr_shift[13]: false
arr_shift[14]: false
arr_shift[15]: false
arr_rot[0]: false
arr_rot[1]: true <---
arr_rot[2]: true <---
arr_rot[3]: true <---
arr_rot[4]: false
arr_rot[5]: false
arr_rot[6]: true <---
arr_rot[7]: false
arr_rot[8]: false
arr_rot[9]: false
arr_rot[10]: false
arr_rot[11]: false
arr_rot[12]: false
arr_rot[13]: false
arr_rot[14]: false
arr_rot[15]: false
shape[0]: false
shape[1]: false <---
shape[2]: false <---
shape[3]: false <---
shape[4]: false
shape[5]: false
shape[6]: false <---
shape[7]: false
shape[8]: false
shape[9]: false
shape[10]: false
shape[11]: false
shape[12]: false
shape[13]: false
shape[14]: false
shape[15]: false


这是我的代码:

memset(shape, 0, 16*sizeof(bool));
if(toShift == true) {
    memcpy(shape, arr_shift, 16*sizeof(bool));
}
else {
    memcpy(shape, arr_rot, 16*sizeof(bool));
}
for(int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
        fprintf(stderr, "shape[%i]: %s\n", i*4+j, shape[i*4+j]? "true":"false" );

    }
}
fprintf(stderr, "\n\n");


形状的声明在Block类标题中,如下所示:

    bool shape[16];

最佳答案

您尚未显示arr_rot的声明位置或toShift的值。但是,很可能toShifttrue或您在另一个函数中声明了arr_rot指向堆栈中的位置。

09-06 22:26