在应用我开发在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)
Answer 1:
我一直在试图调用另一个类,所以当它试图获得高度或宽度它内部的未初始化的画布,它会崩溃。
Answer 2:
我有同样的问题android.media.MediaRecorder的一个实例。
代码访问#getMaxAmplitude()
后#reset()
和#release()
在MediaRecorder实例已被调用。
Answer 3:
今天早晨我同样的问题,并能跟踪回意外的绘制,MDPI文件夹保存图像宽800个像素。 当我意识到发生了什么事我与它修修补补一秒钟。 我试图压缩它很难看到,如果它是文件大小有关,事实并非如此。 然后我试图拯救它再次650个像素宽,并制定了该文件夹中。 所以介于没有为每个文件夹我猜的突破点。 然后,我把在预期华电国际文件夹中的800 p宽图像,并在MDPI 480 p宽,它固定它。
Answer 4:
我有同样的问题,也是一个良好的夜间睡眠,并在这我已经够傻未初始化的位图在画布早晨咖啡后发现。 看来,很多如果不是全部的画布绘制代码是不是随处可以检测到本地代码和未初始化的对象传递。
SIGSEGV用空地址(00000000)意味着你的应用程序已经提领一空指针,所以看出来的,你通过空指针所备份的地方(即空的引用对象实例你没有在第一时间实例化)代码通过本机代码,不正确检查这个错误。
Answer 5:
我在使用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的情况下未初始化这导致空指针异常和致命错误。
Answer 6:
当我在Android上做是Cocos2d-X的应用程序我有这个问题。 问题是,我的层是CCLayer:
CCLayer::init()
但在头文件我有:
class HelloWorld : public cocos2d::CCLayerColor
我改变CCLayerColor到CCLayer和我的应用程序工作
Answer 7:
同样的事情发生在我身上的游戏开发过程中使用LibGDX框架为Android,和这里的原因:
我有2个屏幕- GameScreen
和BattleScreen
。 GameScreen
是我将我的角色在地图上。 当我与敌人精灵碰撞我立刻用game.setScreen(new BattleScreen(this))
改变当前屏幕BattleScreen
。 这里就是致命的信号11使用的情况发生。 起初我以为它必须是与装载资产,因为我的资产管理器实例是静态的。 我试图加载它们,但没有工作的多种方式。 原来我是在错误的地方改变屏幕。 对于我GameScreen
我有WorldController
和WorldRenderer
实例。 我用worldController.update()
和worldRenderer.render()
内GameScreen
的render(float deltaTime)
方法。 里面worldController.update()
我是碰撞检测,一旦我找到了一个与敌人改变屏幕。 这是不利于Android的,也许是因为它发生了更新和渲染之间,也花了一些时间,而更新仍在运行,并导致冲突 - 我不知道。 但这里是我是如何解决它:
- 我添加了一个布尔标志(默认为false)内
WorldController
,每次与敌人发生碰撞,我设置为true - 在
GameScreen
的render()
我检查这个标志-如果这是真的我会改变屏幕BattleScreen
,否则我会更新和渲染GameScreen
现在,它完美的作品每次,没有致命的信号误差11凡
这里是我的GameScreen
的render()
方法:
@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();
}
}
Answer 8:
就我而言,这是一个的onDraw事件,以防止将在画布上完成了平局内一个空指针异常。 我觉得是时候给出平局问题ocurr一般的错误信息。
Answer 9:
使用Libgdx为Android的时候我也曾经有过这样的错误,我发现了这个错误是由Box2D的,它使用本地代码引起的,最好是看你的代码,它使用的Box2D的一部分,并查看是否有任何空指针。
Answer 10:
在我的情况下BluetoothSocket
试图建立蓝牙连接时为空
文章来源: Android Fatal Signal 11