Android致命信号11

时间:2012-05-02 23:30:32

标签: java android crash signals

在我在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)

10 个答案:

答案 0 :(得分:25)

我一直试图在另一个类中调用未初始化的Canvas,所以当它试图获得它的高度或宽度时,它会崩溃。

答案 1 :(得分:13)

我对android.media.MediaRecorder的实例有同样的问题。

在调用MediaRecorder实例上#getMaxAmplitude()#reset()之后访问的代码#release()

答案 2 :(得分:8)

今天早上我遇到了同样的问题,并且能够将其追踪到意外地在drawable-mdpi文件夹中保存800像素宽的图像。当我意识到发生了什么事时,我用它修补了一秒钟。我试图压缩它很难看它是否与文件大小有关,但事实并非如此。然后我尝试再次以650像素宽保存它,它从该文件夹中解决了。所以介于两者之间,我猜的每个文件夹都有一个突破点。然后我将800 p宽的图像放在预期的hdpi文件夹中,将480 p宽的图像放在mdpi中并修复它。

答案 3 :(得分:5)

我遇到了同样的问题,经过一夜的睡眠和早上的咖啡后发现我已经傻了,用未初始化的Bitmap支持画布。似乎并非所有的画布绘制代码都是本机代码,并且在任何地方都没有检测到未初始化对象的传递。

带有空地址(0x00000000)的SIGSEGV意味着您的应用程序已取消引用空指针,因此请注意传递空指针的位置(即,对您尚未实例化的对象实例的空引用)到本机代码支持的代码,并没有正确检查此错误。

答案 4 :(得分: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实例未初始化导致NullPointerException和致命错误。

答案 5 :(得分:2)

当我在android上制作cocos2d-x应用程序时,我遇到了这个问题。问题是我的图层是CCLayer:

 CCLayer::init()

但是在头文件中我有:

 class HelloWorld : public cocos2d::CCLayerColor

我将CCLayerColor更改为CCLayer并且我的应用程序正常工作

答案 6 :(得分:2)

在使用Android的LibGDX框架进行游戏开发时,我发生了同样的事情,原因如下:

我有2个屏幕 - GameScreenBattleScreenGameScreen是我在地图上移动角色的地方。当我与敌人精灵发生碰撞时,我立即使用game.setScreen(new BattleScreen(this))并将当前屏幕更改为BattleScreen。这就是致命信号11曾经发生过的地方。起初我认为它与加载资产有关,因为我的资产管理器实例是静态的。我正在尝试多种方式加载它们但没有任何效果。原来我在错误的地方更换了屏幕。对于我的GameScreen,我有WorldControllerWorldRenderer个实例。我在worldController.update()的{​​{1}}方法中使用了worldRenderer.render()GameScreen。在render(float deltaTime)内部,当我发现敌人时,我正在检查碰撞和更换屏幕。这对Android来说并不好,可能是因为它发生在更新和渲染之间,或者花了一些时间,而更新仍然在运行并且导致冲突 - 我不知道。但这是我如何解决它:

  1. 我在worldController.update()内添加了一个布尔标志(默认为false),每当与敌人发生碰撞时我都将其设置为真
  2. WorldController的{​​{1}}我正在检查此标志 - 如果确实如此,我会将屏幕更改为GameScreen,否则我会更新并呈现render() < / LI>

    现在它每次都很完美,没有任何致命信号错误

    这是我的BattleScreen GameScreen方法:

    GameScreen

答案 7 :(得分:1)

就我而言,它是onDraw事件中的空指针异常,阻止在画布上完成绘制。我认为是绘制问题时出现的一般错误消息。

答案 8 :(得分:1)

在使用Libgdx for android时我也遇到了这个错误,我发现这个错误是 由使用本机代码的Box2d引起的,最好查看使用Box2d的部分代码并查看是否有任何空指针。

答案 9 :(得分:0)

在我的情况下,BluetoothSocket在尝试建立蓝牙连接时为空