web-dev-qa-db-ja.com

Android Fatal Signal 11

Androidで開発しているアプリでは、Fatal Signal 11エラーが発生し続けます。

私はそれが私がメモリにアクセスしている方法と関係があると思うが、私はそれが何を引き起こしているのか理解できない。

どんな助けも大歓迎です!

LogCatは次のとおりです。

05-02 23:47:17.618: D/dalvikvm(590): GC_FOR_ALLOC freed 68K, 4% free 6531K/6787K, paused 101ms
05-02 23:47:17.638: I/dalvikvm-heap(590): Grow heap (frag case) to 7.619MB for 1228816-byte allocation
05-02 23:47:17.738: D/dalvikvm(590): GC_CONCURRENT freed 1K, 4% free 7730K/8007K, paused 5ms+14ms
05-02 23:47:17.878: D/dalvikvm(590): GC_FOR_ALLOC freed <1K, 4% free 7730K/8007K, paused 37ms
05-02 23:47:17.888: I/dalvikvm-heap(590): Grow heap (frag case) to 8.790MB for 1228816-byte allocation
05-02 23:47:17.998: D/dalvikvm(590): GC_CONCURRENT freed <1K, 4% free 8930K/9223K, paused 4ms+4ms
05-02 23:47:17.998: A/libc(590): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
72
Declan Greally

別のクラス内で初期化されていないCanvasを呼び出そうとしていたので、その高さまたは幅を取得しようとするとクラッシュしました。

25
Declan Greally

Android.media.MediaRecorderのインスタンスでも同じ問題が発生しました。

MediaRecorderインスタンスの#getMaxAmplitude()および#reset()が呼び出された後、#release()にアクセスするコード。

13
Martin

今朝、この同じ問題が発生し、誤ってdrawable-mdpiフォルダーに幅800ピクセルの画像を保存するまで追跡することができました。何が起こったかに気付いたとき、私はそれを少しいじりました。圧縮してファイルサイズに関連しているかどうかを確認するために、ハードに圧縮してみました。それから幅650ピクセルでもう一度保存してみましたが、そのフォルダーからはうまくいきました。そのため、その間のどこかに、私が推測するすべてのフォルダーのブレークポイントがあります。次に、800 p幅の画像を目的のhdpiフォルダーに、480 p幅の画像をmdpiに入れて修正しました。

8
a54studio

私は同じ問題を抱えていて、良い睡眠と朝のコーヒーの後、初期化されていないビットマップでキャンバスをバックアップするのに十分な愚かさを見つけました。キャンバスの描画コードのすべてがネイティブコードであるとは限りませんが、初期化されていないオブジェクトの受け渡しはどこでも検出されないようです。

Nullアドレス(0x00000000)のSIGSEGVは、アプリケーションがnullポインターを逆参照していることを意味するため、nullポインター(つまり、最初にインスタンス化されていないオブジェクトインスタンスへの空の参照)を渡す場所を探してくださいネイティブコードによって、このエラーを適切にチェックしません。

5
ChrisB

Canvasクラスの使用中に同じ致命的エラーが発生しました。
私のコードはこのように見えます。次のコードはArcを初期化し、キ​​ャンバスに描画します。

private RectF r1 = null;
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

public Arc(Context ctx) {
    super(ctx);
    mPaint.setColor(0xFFFF0000);
    r1 = new RectF(200, 200, 400, 400);
}

protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   canvas.drawArc(r1, 0, 90, true, mPaint);
}

この問題は、RectFのインスタンスが初期化されず、NullPointerExceptionと致命的なエラーが発生したために発生しました。

4
Vikas

Android用のLibGDXフレームワークを使用したゲーム開発中に同じことが起こりました。その理由は次のとおりです。

GameScreenBattleScreenの2つの画面があります。 GameScreenは、マップ上でキャラクターを移動する場所です。敵のスプライトと衝突した場合、すぐにgame.setScreen(new BattleScreen(this))を使用し、現在の画面をBattleScreenに変更します。 Fatal Signal 11が発生する場所は次のとおりです。最初は、アセットマネージャーインスタンスが静的であるため、アセットの読み込みに関係があると考えました。私はそれらをロードする複数の方法を試しましたが、何も機能しませんでした。間違った場所で画面を変更していたことがわかりました。 GameScreenには、WorldControllerおよびWorldRendererインスタンスがありました。 GameScreenworldController.update()メソッド内でworldRenderer.render()およびrender(float deltaTime)を使用していました。内部worldController.update()敵との衝突を発見するとすぐに、衝突をチェックして画面を変更していました。更新とレンダリングの間に発生したか、更新がまだ実行されていて競合が発生するのに時間がかかったためか、Androidには適していませんでした-わかりません。しかし、ここに私がそれを修正した方法があります:

  1. WorldController内にブールフラグ(デフォルトではfalse)を追加し、敵との衝突が発生するたびにtrueに設定しました
  2. GameScreenrender()でこのフラグをチェックしていました-trueの場合、画面をBattleScreenに変更し、そうでない場合はGameScreenを更新してレンダリングします

今では毎回完璧に動作し、致命的な信号エラー11はありません

これが私のGameScreenrender()メソッドです:

@Override
public void render(float deltaTime) {

    if(worldController.isCollisionWithEnemy()) {

        game.setScreen(game.battleScreen);

    } else {

        if(!paused) {
            worldController.update(deltaTime);
        }

        Gdx.gl.glClearColor(57.0f / 255.0f, 181.0f / 225.0f, 115.0f / 255.0f, 1.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        worldRenderer.render();
    }

}
2
Celebes

androidでcocos2d-xアプリを作成しているときにこの問題が発生しました。問題は、私のレイヤーがCCLayerだったことです。

 CCLayer::init()

しかし、ヘッダーファイルには:

 class HelloWorld : public cocos2d::CCLayerColor

cCLayerColorをCCLayerに変更し、アプリが機能しました

2
Tim

私もLibgdx for Androidを使用しているときにこのエラーが発生しました。このエラーはネイティブコードを使用するBox2dが原因であることがわかりました。

1
David Fetcher

私の場合、onDrawイベント内のnullポインター例外が原因で、キャンバス上で描画が完了しませんでした。ドローの問題が発生したときに表示される一般的なエラーメッセージだと思います。

1
jesantana

私の場合、Bluetooth接続を確立しようとしたときにBluetoothSocketはnullでした

0
Dediqated