web-dev-qa-db-fra.com

Android Fatal Signal 11

Dans l'application que je développe sur Android, je reçois une erreur Fatal Signal 11.

Je pense que cela a quelque chose à voir avec la façon dont j'accède à la mémoire, mais je ne peux pas comprendre ce qui la cause.

Toute aide sera très appréciée!

Voici le 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)
72
Declan Greally

J'avais essayé d'appeler un canevas non initialisé dans une autre classe afin que, lorsqu'il essayait d'obtenir la hauteur ou la largeur, il se bloque.

25
Declan Greally

J'ai eu le même problème avec une instance de Android.media.MediaRecorder.

Le code auquel on a accédé #getMaxAmplitude() après que #reset() et #release() de l'instance MediaRecorder ait été appelé.

13
Martin

J’ai eu le même problème ce matin et j’ai pu le retrouver en sauvegardant accidentellement une image de 800 pixels de large dans le dossier drawable-mdpi. Quand j'ai réalisé ce qui s'était passé, j'ai bricolé une seconde. J'ai essayé de le compresser pour voir s'il était lié à la taille du fichier et si ce n'était pas le cas. Ensuite, j'ai essayé de le sauvegarder à nouveau avec une largeur de 650 pixels et cela fonctionnait dans ce dossier. Donc, quelque part entre il y a le point de rupture pour chaque dossier, je suppose. Ensuite, je mets l'image large 800 p dans le dossier hdpi prévu et le large 480 p dans le mdpi et il l'a corrigé.

8
a54studio

J'ai eu le même problème et après une bonne nuit de sommeil et un café le matin, je me suis rendu compte que j'étais assez stupide pour sauvegarder la toile avec un bitmap non initialisé. Il semble que la majeure partie, sinon la totalité du code de dessin de la zone de dessin, est un code natif et que le passage d’objets non initialisés n’est pas détecté partout.

SIGSEGV avec une adresse null (0x00000000) signifie que votre application a déréférencé un pointeur null. Par conséquent, recherchez les endroits où vous passez des pointeurs nuls (c'est-à-dire des références vides à des instances d'objet que vous n'avez pas instanciées au départ) au code sauvegardé. par le code natif et ne vérifie pas correctement cette erreur.

5
ChrisB

J'ai rencontré la même erreur fatale lors de l'utilisation de la classe Canvas.
Mon code ressemble à ceci. Le code suivant initialise un arc et le dessine sur la toile.

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);
}

Le problème est dû au fait que mon instance de RectF n'a pas été initialisée, ce qui a entraîné NullPointerException et l'erreur fatale.

4
Vikas

La même chose m’est arrivée lors du développement de jeux avec le framework LibGDX pour Android, et voici pourquoi:

J'ai 2 écrans - GameScreen et BattleScreen. GameScreen est l'endroit où je déplace mon personnage sur la carte. En cas de collision avec un Sprite ennemi, j'utilise instantanément game.setScreen(new BattleScreen(this)) et modifie l'écran actuel en BattleScreen. Voici où le signal fatal 11 se produisait. Au début, je pensais que cela avait quelque chose à voir avec le chargement des actifs, car mon instance de gestionnaire d’actifs était statique. J'essayais plusieurs façons de les charger mais rien ne fonctionnait. Il s'est avéré que je changeais l'écran au mauvais endroit. Pour ma GameScreen j’avais WorldController et WorldRenderer instance. J'utilisais worldController.update() et worldRenderer.render() à l'intérieur de la méthode GameScreen de render(float deltaTime). À l'intérieur de worldController.update() Je vérifiais les collisions et changeais d'écran dès que j'en trouvais une avec l'ennemi. Ce n'était pas bon pour Android, peut-être parce que c'est arrivé entre la mise à jour et le rendu, ou cela a pris un certain temps, alors que la mise à jour était toujours en cours d'exécution et que cela entraînait des conflits - je ne sais pas. Mais voici comment je l'ai corrigé:

  1. J'ai ajouté un drapeau booléen (false par défaut) à l'intérieur de WorldController et chaque fois qu'une collision avec l'ennemi se produisait, je le réglais sur true
  2. Dans GameScreen's render() je vérifiais cet indicateur - s'il était vrai, je changerais l'écran en BattleScreen, sinon je mettrais à jour et rendrais GameScreen

Maintenant, cela fonctionne parfaitement à chaque fois, aucune erreur de signal mortel 11

Voici ma méthode 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();
    }

}
2
Celebes

j'ai eu ce problème quand je faisais une application cocos2d-x sur Android. le problème était que ma couche était une couche CC:

 CCLayer::init()

mais dans le fichier d'en-tête, j'avais:

 class HelloWorld : public cocos2d::CCLayerColor

j'ai changé CCLayerColor en CCLayer et mon application a fonctionné

2
Tim

Moi aussi j'ai eu cette erreur lors de l'utilisation de Libgdx pour Android, et j'ai découvert que cette erreur est causée par Box2d qui utilise du code natif, il est préférable de regarder une partie de votre code qui utilise Box2d et de voir s'il existe des pointeurs nuls.

1
David Fetcher

Dans mon cas, il s'agissait d'une exception de pointeur null dans un événement onDraw qui empêchait le dessin d'être terminé sur le canevas. Je pense que c'est un message d'erreur général donné lorsqu'un problème de tirage se pose.

1
jesantana

Dans mon cas, le BluetoothSocket était nul lors de la tentative d'établissement d'une connexion Bluetooth

0
Dediqated