2011年9月10日土曜日

[Android-NDK] ERROR [binderDied] end

How to solve "[binderDied] end" error

アプリを開発していたら、突然こんなエラーが起こりました。
ERROR/CameraService(1215): [binderDied] end

Android-NDKのログにはこんなエラーが出てます。
DEBUG/ndk(2474): [ 08-27 20:12:59.451 2474:0x9aa F//system/bin/app_process ]
DEBUG/ndk(2474): stack corruption detected: aborted

原因はJNI(Android-NDK)のchar配列の要素不足でした。

エラーになったコードの抜粋
sprintf関数の引数xとyとzがdouble型だったため、文字列に変換すると予想以上に長くなり、50バイトを超えてしまいました。
char c[50];を
char c[100];に変更したら正常に動きました。

LogCatに「CameraService」とあるし実際に android.hardware.Camera を使うアプリだったのですが、カメラは全く関係ありませんでした。
エラー内容と関係ないログが出力されたので、少し手間取りました。

ちなみにVisual C++ 2010 ではどんなエラーメッセージが出るのかと思い、同じバグを再現したところ
Run-Time Check Failure #2 - Stack around the variable '変数名' was corrupted.
バッファー オーバーランが *****.exe で発生し、プログラムの内部状態を破損しました。[中断] をクリックしてプログラムをデバッグするか、または [続行] をクリックしてプログラムを終了してください。
と表示されました。

「[binderDied] end」というメッセージはわかりにくいですが、「stack」と「corruption / corrupted」というキーワードを見たら、スタック領域の破損∋配列の要素不足の疑いがありそうです。

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿