alg-ljの日記

2005-10-23

ご利用は計画的に

自作アプリで、

「一部の機種でのみアプリ起動時にFatal Errorになる」

という現象が起きてしまいました。
日記事にしたAlertでエラー箇所を特定する方法をとったところ、発生箇所がEvtGetEventという結果に。
…そんなバカな。
そこでエラーになっちゃぁ、何も動きませんよ、旦那。
原因は他の箇所にあるだろうと目星をつけ、怪しい箇所をコメントアウトすることに。
そしてコンパイルして、エラーが起きなかったら、コメントアウトの範囲を狭めて、またコンパイル
エラーが起きたら、コメントアウトの範囲を変えてみて、コンパイル
これを繰り返すことで、原因箇所が特定できました。

今回のエラーを引き起こしていたのは、char変数に文字列を代入するところ。
こんな感じのソースでした。

char	kakikomiData1[32];

StrPrintF(kakikomiData1,"tekitouna mojiretsu 32 moji bun.");

文字列変数kakikomiData1に、適当な文字列を入れようとしていたわけです。
本来StrPrintFは数字を整形して表示するために使う命令なんですが、数字を入れなくても使えるようなので、何気なく使っていたんですよ。
これを、

char	kakikomiData1[32];

StrNCopy(kakikomiData1,"tekitouna mojiretsu 32 moji bun.",32);

と変えたら、エラーが起きなくなりました。
命令は勝手に読み替えたりせずにちゃんと使いましょう、ということのようです。