2012-03-03 22 views
0

私は自分のテトリスをコーディングしています。 blockRotationメソッドを作成しているうちに、memcpyで奇妙な問題が発生しました。 blockRotateの2回目の呼び出しで、my bool [4 * 4]配列が正しく生成されているにもかかわらず、corectlyに保存されません。どうしましたか?Memcpy予期しない動作

これは私のエラーログである:

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

Declararationは、ブロック・クラス・ヘッダであり、以下の通りである:

bool shape[16]; 
+1

これが 'memcpy'の問題ならば、(明らかに)無関係なもの(シフト、回転など)をすべて避ける簡単なコード例を作れますか?理想的には、10行以上! –

+2

'memcpy'予期しない動作! 11時のニュース... – Malkocoglu

+0

まったく同じメモリを他の値で上書きする前の全く別の 'memset' *のポイントは何ですか?また、どのようにしてノイズを多すぎるように印刷したのですが、あなたの問題の中心にある「シェイプ」の宣言を逃してしまいましたか? –

答えて

1

arr_rotが宣言されているか、またはtoShiftという値が表示されていません。しかし、ほとんどの場合toShifttrueです。または、別の関数でスタック上でarr_rotが指し示す場所を宣言しています。

+0

を追加しました。明らかにtoShiftは常に真実です。ダムあなたのノートブックのキーボード! – icepopo