2012-05-02 202 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的代码,看看是否有空指针。

相关问题