Android致命信号11


72

在我在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
Kapelchik 2012年

2
您的代码是否用C编写?
Yusuf X

2
不,都是用Java编写的。
Declan Greally,2012年

1
在StackOverflow上,将问题标记为已修复最佳方法是添加您自己的答案,然后接受该答案,而不是编辑原始帖子,然后在问题列表中将该问题标记为已解决。
西拉斯·帕克

1
是的,我进行了编辑,因为我必须等待8个小时才能回答自己的问题。
Declan Greally,2012年

Answers:


25

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


8
您是否做了什么特别的工作来弄清楚您的未启动行为Canvas是否导致了错误?我遇到了同样的问题,但不确定在哪里找到它的根源。
2012年

4
我有同样的问题,但没有使用画布。我正在使用媒体播放器在Internet上播放视频吗?
ErsinGülbahar12年

1
不仅仅与Canvas有关,我还遇到了一个“最终活动行为”,该错误被“ AsyncTask中的AsyncTask”使用,这也是一个问题。
2014年

我实现了Flurry,现在却给出了这个错误,Fatal signal 11 (SIGSEGV) at 0x3f800010 (code=1), thread 28708 (com.application)我不知道发生了什么。它仅在一项活动中提供此功能。在其他人工作正常。xx
Tushar Gogna'Mar

13

我在android.media.MediaRecorder实例上遇到了同样的问题。

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


我遇到过同样的问题。您如何解决?
Mohamed Habib 2013年

没有简单的解决方法。我必须检查在#reset()或#release()之后调用#getMaxAmplitude()的位置。
马丁

1
也许在调用#reset()或#relaese()之后尝试使MediaRecorder对象无效,这应该向您显示相关的NPE
Alamgir Mand

8

今天早上我遇到了同样的问题,能够将其追溯到意外地将图像保存在drawable-mdpi文件夹中的800像素宽。当我意识到发生了什么事时,我动了一下。我尝试压缩它,以查看它是否与文件大小有关,而与文件大小无关。然后,我再次尝试将其保存为650像素宽,并且该文件夹无法正常工作。因此,在每个文件夹之间都有一个断点,我猜。然后,将800 p宽的图像放置在预期的hdpi文件夹中,将480 p宽的图像放置在mdpi中,并将其固定。


这很奇怪,但这似乎也解决了我的问题,只有我的图像只有800 * 480。
Tore Rudberg 2014年

我猜它在每个文件夹中都按设定的最大/最小大小移动。如果高度或宽度超过它,那么可能会造成麻烦。很高兴能为您提供帮助,我知道我正在为此绞尽脑汁。
2014年

为我工作!开发人员在上网之前做了什么?
Jimbali 2014年

5

我遇到了同样的问题,经过一夜的睡眠和早晨的咖啡后,我发现自己很傻,可以使用未初始化的位图来支持画布。似乎所有画布绘图代码(如果不是全部)都是本机代码,并且未在各处检测到未初始化对象的传递。

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


在开始抽签之前检查nullpointers是一个好主意,谢谢=)
Cd

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和致命错误。


2

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

 CCLayer::init()

但是在头文件中,我有:

 class HelloWorld : public cocos2d::CCLayerColor

我将CCLayerColor更改为CCLayer,并且我的应用正常运行


2

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

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

  1. 我在内部添加了一个布尔标志(默认为false)WorldController,每次与敌人发生碰撞时,我都将其设置为true
  2. 在中GameScreenrender()我正在检查此标志-如果为true,则将屏幕更改为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

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


1

在Android上使用Libgdx时,我也遇到了此错误,并且我发现此错误是由使用本机代码的Box2d引起的,最好查看使用Box2d的部分代码,看看是否有空指针。


0

就我而言,BluetoothSocket尝试建立蓝牙连接时为null

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.