In der App, die ich auf Android entwickle, wird immer wieder der Fehler Fatal Signal 11 angezeigt.
Ich denke, es hat etwas mit der Art und Weise zu tun, wie ich auf den Speicher zugreife, aber ich kann nicht herausfinden, was ihn verursacht.
Jede Hilfe wird sehr geschätzt!
Hier ist die 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)
Antworten:
Ich hatte versucht, eine nicht initialisierte Leinwand in einer anderen Klasse aufzurufen. Wenn sie also versuchte, die Höhe oder Breite zu ermitteln, stürzte sie ab.
quelle
Canvas
dort einen Fehler verursacht hat? Ich habe das gleiche Problem, bin mir aber nicht sicher, wo ich die Wurzel finden kann.Fatal signal 11 (SIGSEGV) at 0x3f800010 (code=1), thread 28708 (com.application)
Ich habe keine Ahnung, was los ist. Es gibt dies nur in einer Aktivität. Funktioniert gut in anderen. xxIch hatte das gleiche Problem mit einer Instanz von android.media.MediaRecorder.
Der Code, auf den
#getMaxAmplitude()
nach#reset()
und#release()
auf der MediaRecorder-Instanz zugegriffen wurde, wurde aufgerufen.quelle
Ich hatte heute Morgen das gleiche Problem und konnte es zurückverfolgen, um versehentlich ein 800 Pixel breites Bild im Ordner drawable-mdpi zu speichern. Als ich merkte, was passiert war, bastelte ich eine Sekunde daran. Ich habe versucht, es stark zu komprimieren, um festzustellen, ob es mit der Dateigröße zusammenhängt und nicht. Dann habe ich versucht, es erneut mit einer Breite von 650 Pixel zu speichern, und es hat aus diesem Ordner heraus funktioniert. Irgendwo dazwischen gibt es also die Bruchstelle für jeden Ordner, den ich vermuten würde. Dann habe ich das 800 p breite Bild in den vorgesehenen HDPI-Ordner und das 480 p breite Bild in das MDPI gelegt und es behoben.
quelle
Ich hatte das gleiche Problem und stellte nach einer guten Nacht und einem Kaffee am Morgen fest, dass ich albern genug war, um die Leinwand mit einer nicht initialisierten Bitmap zu untermauern. Es scheint, dass viel, wenn nicht der gesamte Canvas-Zeichnungscode nativer Code ist und die Übergabe nicht initialisierter Objekte nicht überall erkannt wird.
SIGSEGV mit einer Nulladresse (0x00000000) bedeutet, dass Ihre Anwendung einen Nullzeiger dereferenziert hat. Achten Sie daher auf Stellen, an denen Sie Nullzeiger (dh leere Verweise auf Objektinstanzen, die Sie nicht instanziiert haben) an den gesicherten Code übergeben durch nativen Code und prüft nicht richtig auf diesen Fehler.
quelle
Bei der Verwendung der Canvas-Klasse ist derselbe schwerwiegende Fehler aufgetreten.
Mein Code sieht so aus. Der folgende Code initialisiert einen Bogen und zeichnet ihn auf die Leinwand.
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); }
Das Problem trat auf, weil meine Instanz von RectF nicht initialisiert wurde, was zu NullPointerException und dem schwerwiegenden Fehler führte.
quelle
Ich hatte dieses Problem, als ich eine cocos2d-x App auf Android machte. Das Problem war, dass meine Ebene eine CCLayer war:
aber in der Header-Datei hatte ich:
class HelloWorld : public cocos2d::CCLayerColor
Ich habe CCLayerColor in CCLayer geändert und meine App hat funktioniert
quelle
Das gleiche passierte mir während der Spieleentwicklung mit dem LibGDX-Framework für Android. Und hier ist der Grund:
Ich habe 2 Bildschirme -
GameScreen
undBattleScreen
.GameScreen
Hier bewege ich meinen Charakter auf der Karte. Wenn ich mit einem feindlichen Sprite kollidiere, benutze ich sofort dengame.setScreen(new BattleScreen(this))
aktuellen Bildschirm und ändere ihn aufBattleScreen
. Hier passierte früher das Fatal Signal 11. Zuerst dachte ich, es hätte etwas mit dem Laden von Assets zu tun, da meine Asset Manager-Instanz statisch war. Ich habe mehrere Möglichkeiten zum Laden ausprobiert, aber nichts hat funktioniert. Es stellte sich heraus, dass ich den Bildschirm an der falschen Stelle wechselte. Für meine hatteGameScreen
ichWorldController
undWorldRenderer
Instanz. Ich benutzteworldController.update()
undworldRenderer.render()
inGameScreen
'srender(float deltaTime)
Methode. InnerhalbworldController.update()
Ich suchte nach Kollisionen und wechselte den Bildschirm, sobald ich eine mit dem Feind fand. Es war nicht gut für Android, vielleicht weil es zwischen Update und Rendering passiert ist oder es einige Zeit gedauert hat, während das Update noch lief und es zu Konflikten führte - ich weiß nicht. Aber so habe ich es behoben:WorldController
und jedes Mal, wenn eine Kollision mit dem Feind passiert ist, habe ich es auf true gesetztGameScreen
's haberender()
ich dieses Flag überprüft - wenn es wahr wäre, würde ich den Bildschirm auf ändernBattleScreen
, sonst würde ich aktualisieren und rendernGameScreen
Jetzt funktioniert es jedes Mal perfekt, kein FATAL SIGNAL ERROR 11
Hier ist mein
GameScreen
‚s -render()
Methode:@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(); } }
quelle
In meinem Fall war es eine Nullzeigerausnahme innerhalb eines onDraw-Ereignisses, die verhindert, dass das Zeichnen auf der Zeichenfläche abgeschlossen wird. Ich denke, es wird eine allgemeine Fehlermeldung ausgegeben, wenn ein Zeichenproblem auftritt.
quelle
Ich hatte auch diesen Fehler bei der Verwendung von Libgdx für Android, und ich fand heraus, dass dieser Fehler durch Box2d verursacht wird, das nativen Code verwendet. Es ist besser, einen Teil Ihres Codes zu betrachten, der Box2d verwendet, und festzustellen, ob es Nullzeiger gibt.
quelle
In meinem Fall
BluetoothSocket
war das null, als versucht wurde, eine Bluetooth-Verbindung herzustellenquelle