icepopo
icepopo

Reputation: 1637

Memcpy unexpected behavior

I'm coding my own version of Tetris. While creating blockRotation method I encountered weird problem with memcpy. During second call for blockRotate, my bool[4*4] array is not saved corectly, despite that is generated properly. What's wrong?

This is my error log:

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

And this is my code:

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");

Declararation of shape is in Block class header, and is as follows:

    bool shape[16]; 

Upvotes: 0

Views: 328

Answers (1)

Kaganar
Kaganar

Reputation: 6570

You haven't shown us where arr_rot is declared or what value toShift is. However, most likely either toShift is true or you declared where arr_rot points to on the stack in another function.

Upvotes: 1

Related Questions