簡體   English   中英

Android致命信號11

[英]Android Fatal Signal 11

在我正在Android上開發的應用程序中,我一直收到致命信號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)

我一直試圖在另一個類中調用未初始化的Canvas,所以當它試圖獲得它的高度或寬度時,它會崩潰。

我對android.media.MediaRecorder的實例有同樣的問題。

代碼訪問#getMaxAmplitude()#reset()#release()在MediaRecorder實例已被調用。

我今天早上遇到了同樣的問題,並且能夠追蹤它以便在drawable-mdpi文件夾中意外保存800像素寬的圖像。 當我意識到發生了什么事時,我用它修補了一秒鍾。 我試圖壓縮它很難看它是否與文件大小有關,但事實並非如此。 然后我嘗試再次以650像素寬保存它,它從該文件夾中解決了。 所以介於兩者之間,我猜的每個文件夾都有一個突破點。 然后我將800 p寬的圖像放在預期的hdpi文件夾中,將480 p寬的圖像放在mdpi中並修復它。

我有同樣的問題,經過一個良好的睡眠和早上喝咖啡后發現,我已經傻到足以用未初始化的Bitmap支持畫布。 看起來很多(如果不是全部)畫布繪制代碼都是本機代碼,並且到處都沒有檢測到未初始化對象的傳遞。

帶有空地址(0x00000000)的SIGSEGV意味着您的應用程序已取消引用空指針,因此請注意將空指針(即對首先未實例化的對象實例的空引用)的位置傳遞給支持的代碼通過本機代碼,並沒有正確檢查此錯誤。

我在使用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和致命錯誤。

當我在android上制作一個cocos2d-x應用程序時,我遇到了這個問題。 問題是我的圖層是CCLayer:

 CCLayer::init()

但在頭文件中我有:

 class HelloWorld : public cocos2d::CCLayerColor

我將CCLayerColor更改為CCLayer並且我的應用程序正常運行

在使用Android的LibGDX框架進行游戲開發時,我發生了同樣的事情,原因如下:

我有2個屏幕 - GameScreenBattleScreen GameScreen是我在地圖上移動角色的地方。 當我與敵人精靈發生碰撞時,我立即使用game.setScreen(new BattleScreen(this))並將當前屏幕更改為BattleScreen 這就是致命信號11曾經發生過的地方。 起初我認為它與加載資產有關,因為我的資產管理器實例是靜態的。 我正在嘗試多種方式加載它們但沒有任何效果。 原來我在錯誤的地方更換了屏幕。 對於我的GameScreen我有WorldControllerWorldRenderer實例。 我在GameScreenrender(float deltaTime)方法中使用了worldController.update()worldRenderer.render() worldController.update()里面,當我找到敵人時,我正在檢查碰撞和更換屏幕。 這對Android來說並不好,可能是因為它發生在更新和渲染之間,或者花了一些時間,而更新仍然在運行並且導致沖突 - 我不知道。 但這是我如何解決它:

  1. 我在WorldController添加了一個布爾標志(默認為false),每當與敵人發生碰撞時,我都將其設置為true
  2. GameScreenrender()我正在檢查這個標志 - 如果是真的我會將屏幕更改為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();
    }

}

在我的例子中,它是onDraw事件中的空指針異常,阻止在畫布上完成繪制。 我認為是繪制問題時出現的一般錯誤消息。

我在使用Libgdx for android時也遇到了這個錯誤,我發現這個錯誤是由使用本機代碼的Box2d引起的,最好看一下使用Box2d的部分代碼並查看是否有任何空指針。

在我的情況下,嘗試建立藍牙連接時, BluetoothSocket為空

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM