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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。