2012-05-02 118 views
69

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

這是分段錯誤,意味着程序訪問了未分配的內存位置。顯示你的LogCat – kapand

+0

@AndreyKapelchik我已經將它添加到現在的問題。 –

+2

是用C編寫的代碼的一部分嗎? –

回答

23

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

+7

有沒有什麼你特別想弄清楚你的外行'Canvas'導致那裏的錯誤?我有同樣的問題,但我不確定在哪裏找到它的根源。 – adneal

+4

我有同樣的問題,但不使用畫布。我使用媒體播放器在互聯網上播放視頻?, –

+1

不僅是關於畫布,我已經經歷了一個'最終活動行爲'這是由一個「AsyncTask在AsyncTask中使用」傳遞的錯誤,這也是一個問題爲了它。 –

13

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

已調用MediaRecorder實例上的#reset()#release()之後訪問的代碼#getMaxAmplitude()

+0

我有同樣的問題。你如何解決它? –

+0

沒有簡單的修復。我不得不以檢查#getMaxAmplitude()#reset後,被稱爲()或#RELEASE()。 – Martin

+1

也許嘗試抵消你MediaRecorder對象調用#reset()或#relaese(後),應該顯示出相關的NPE –

4

我在使用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的實例未初始化這導致空指針異常和致命錯誤。

5

我有同樣的問題,在早上睡了一覺和咖啡之後發現,我已經足夠愚蠢地用未初始化的位圖支持畫布。看起來,如果不是所有的畫布繪製代碼都是本地代碼,並且未初始化的對象的傳遞在任何地方都沒有檢測到。

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

+0

檢查nullpointers開始之前平局是個不錯的主意感謝=) –

2

我有這個問題,當我在android上製作一個cocos2d-x應用程序。問題是,我的層是CCLayer:

CCLayer::init() 

,但在頭文件中我有:

class HelloWorld : public cocos2d::CCLayerColor 

我改變CCLayerColor到CCLayer和我的應用程序工作

8

我有同樣的問題今天早上,它能夠追蹤它,意外地將800像素寬的圖像保存在drawable-mdpi文件夾中。當我意識到發生了什麼事後,我對它進行了一次修整。我試圖壓縮它很難看它是否與文件大小有關,而不是。然後我試着在650像素寬的地方再次保存它,並且它在那個文件夾下工作。因此,我猜想每個文件夾都有一個突破點。然後,我將800 p寬的圖像放入預期的hdpi文件夾中,並在mdpi中放置480 p寬,並將其固定。

+0

這是奇怪的,但是這似乎有解決了我的問題,只有我的圖像只有800 * 480。 –

+0

我猜它的推移,每個文件夾中設置最大/最小尺寸。可能如果高度或寬度超過它,那麼它會引起麻煩。很高興它幫助了你,我知道我正在爲此付出沉重的代價。 – a54studio

+0

爲我工作!在互聯網之前開發者做了什麼? – Magicode

1

在我的情況下,它是一個onDraw事件內的空指針異常,它會阻止繪圖在畫布上完成。我認爲是一個常見的錯誤消息,當繪製問題ocurr。

0

在我的情況下BluetoothSocket是試圖建立使用LibGDX框架Android的藍牙連接的遊戲開發過程中

2

同樣的事情發生在我身上時,空,這裏的原因:

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

  1. 我添加了一個布爾標誌(默認爲false)內WorldController,每次與敵人發生碰撞,我將其設置爲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(); 
    } 

} 
1

使用Libgdx爲Android的時候我也曾經有過這樣的錯誤,我發現了這個錯誤 造成的Box2D,它使用本地代碼,不如來看看部分你使用Box2d的代碼,看看是否有空指針。

相關問題