FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Xcodeの配列でハマる [Xcode]

今開発中のボードゲームのアプリで、ハマったことがありました。

アプリでは5×5のボードを表示し、画面タップでボード内のコマの数値が変わります。
またUNDO機能のためのバッファも設けました。
コード上ではボードとUNDOバッファのそれぞれに配列を用意しました。

 int board[25];    /* ボードの数値を保持 */
 int undoBuf[25];  /* UNDO用のバッファ */

そしてアプリを動作させてみると、なぜかたまにundoBufの一部が
変な値に書き変わってしまう現象が起きました。

コード上でundoBufの書き込みをしている部分をいくら調べても、おかしな所はありません。
どうやら画面をタップした際に書き変わってるようなんですが。
あれこれ悩むこと2日、ついに原因が。

実は画面タップ位置からコマ番号を割り出すルーチンに記述漏れがあり、
ボード外をタップすると「コマ番号 = 37」とかが取得されてしまっていました。
そしてその値を使って範囲外の board[37]を書き換えようとして、
メモリ上で boardの隣にある undoBufを書き換えてしまっていたのでした。

いやー、こういうのって Xcodeの警告出ないんですね。

試しにこのコードだとエラーが出ますが、
 int board[25];
 board[50] = 0;

こちらは出ません。ぬぬ。
 int board[25];
 int i = 50;
 board[i] = 0;

これは要注意ですね。
でも原因が分かってよかったです。
関連記事

コメントの投稿

非公開コメント

Appご紹介
K app designのAppをご紹介します

ねこわけ

画面中央の猫を次々に仕分けるゲームです。

あまり計算機

あまりを計算できる割算専用の計算機です。

6オクターブ ピアノ

6オクターブ鍵盤のピアノアプリです。iPad専用。

Dynamic Drum

様々な演奏法が楽しめるドラム演奏アプリです。

クイズボタン

早押しクイズのサポートをするアプリです。

クイズボタン Pro

クイズボタンに点数表示機能が付きました。

クイズボタン HD

クイズボタンのiPad専用版。回答者ボタンが8つに増量。

ベロシティ ピアノ

タップの強弱で音量が変わるピアノアプリです。

TIMERx4

4つのキッチンタイマーを同時に動作できるアプリです。

アナデジClock

アナログとデジタルが融合した時計です。
検索フォーム
最新記事
最新コメント
カテゴリ
人気ページ
月別アーカイブ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。