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) 

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

我有一个与android.media.MediaRecorder的实例相同的问题。

在MediaRecorder实例的#reset()#getMaxAmplitude()之后访问#getMaxAmplitude()的代码已被调用。

今天早上我有同样的问题,并能够追踪到意外地在drawable-mdpi文件夹中保存800像素宽的图像。 当我意识到发生了什么事的时候,我琢磨了一下。 我试图压缩它很难看到它是否与文件大小有关,而不是。 然后我试着在650像素宽的地方再次保存它,并将其解压到该文件夹​​中。 所以,我猜想每个文件夹都有一个突破点。 然后,我把800 p宽的图像放在预期的hdpi文件夹中,并在mdpi中放置了480 p宽,并将其固定。

我遇到了同样的问题,在早上睡了一觉,喝完咖啡之后,发现我已经傻到用未初始化的Bitmap支持canvas了。 看来,如果不是所有的canvas绘制代码都是本地代码,并且未初始化的对象的传递在任何地方都不能被检测到。

具有空地址(0x00000000)的SIGSEGV意味着您的应用程序已经取消引用了一个空指针,因此请注意您传递空指针的位置(例如,您首先未实例化的对象实例的空引用)由本机代码,并没有正确检查这个错误。

我使用Canvas类时遇到了同样的致命错误。
我的代码看起来像这样。 下面这段代码初始化一个Arc并在canvas上绘制它。

 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个屏幕 – GameScreenBattleScreenGameScreen是我在地图上移动angular色的地方。 当我与敌方精灵发生冲突时,我立即使用game.setScreen(new BattleScreen(this))并将当前屏幕更改为BattleScreen 。 这是致命的信号11曾经发生的地方。 起初,我认为这与加载资产有关,因为我的资产pipe理器实例是静态的。 我试图加载他们的多种方式,但没有任何工作。 原来我是在错误的地方换屏幕。 对于我的GameScreen我有WorldControllerWorldRenderer实例。 我在GameScreenrender(float deltaTime)方法中使用了worldController.update()worldRenderer.render() 。 在worldController.update()里面,当我发现敌人时,我正在检查碰撞和更换屏幕。 这对于Android来说并不好,也许是因为它发生在更新和呈现之间,或者花费了一些时间,而更新仍在运行,并导致冲突 – 我不知道。 但是,我是这样解决的:

  1. 我在WorldController内部添加了一个布尔标志(默认为false),每次与敌人发生碰撞时,我都将其设置为true
  2. GameScreenrender()我正在检查这个标志 – 如果是真的,我会改变屏幕到BattleScreen ,否则我会更新和渲染GameScreen

现在它每次都能正常工作,不会有任何严重的信号错误

这是我的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事件内的空指针exception,防止绘制完成在canvas上。 我认为是一个一般的错误信息,当一个绘制问题ocurr给出。

我在使用Libgdx for android的时候也出现了这个错误,而且我发现这个错误是由使用本地代码的Box2d引起的,所以最好查看一下使用Box2d的代码,看看是否有空指针。

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