En retournant un int de fonction native(c++, jni) se bloque application

À essayer de comprendre pourquoi c++ appel de fonction retournant un int bloque l'ensemble de l'application, sans les erreurs/avertissements.

Voici code du travail:


    jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
            JNIEnv * env, jobject obj, jint number)
    {
        jint test = rand();
        __android_log_print(ANDROID_LOG_DEBUG, "HelloNDK!", "rand() = %d", test);

        return number;
    }

Et ce code se bloque application sans mise en garde:


    jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
            JNIEnv * env, jobject obj, jint number)
    {
        jint test = rand();
        __android_log_print(ANDROID_LOG_DEBUG, "HelloNDK!", "rand() = %d", test);

        return number + test;
    }

Avant l'application se bloque, je peux voir mon message du journal(__android_log_d'impression) dans le journal de chat

EDIT:
Même si je remplace le "nombre + test" par "1", l'application plante toujours...
Il ne fonctionne que si je retourne "nombre"...

EDIT#2: Java-code:


package org.ntorrent;

import java.util.ArrayList;
import java.util.Random;

public class DummyTorrentInfoProvider implements TorrentInfoProvider {

    public native Integer next(Integer number);

    //public Integer next() { return _random.nextInt(); }

    public native void test();

    private Random _random = new Random(100);

    @Override
    public ArrayList getTorrents() {
        test();
        ArrayList torrents = new ArrayList();
        torrents.add(
                new TorrentInfo("test torrent number 1", next(1),  3f, 5f));
        torrents.add(
                new TorrentInfo("test torrent number 2", next(2), 4f, 15f));
        torrents.add(
                new TorrentInfo("test torrent number 555"));
        torrents.add(
                new TorrentInfo("test torrent number 3", next(3), 13f, 5f));
        return torrents;
    }

    static {
        System.loadLibrary("test");
    }
}
  • pile smash, ou d'autres types de troubles de la mémoire?
  • Faire un dump de la JVM et regardez ce qui se passe exactement. En vertu de Hotspot il y a des options de debug ces problèmes - aucune idée sur android bien. Le code ici est très bien, le problème est ailleurs.
  • Merci pour les réponses rapides, les gars! Je vais essayer ça demain...
  • Ces erreurs sera possible que si j'utilise une version incorrecte de ndk-têtes?
  • juste de la curiosité ce qui se passe si vous ne test += number; return test;
  • il se bloque toujours
  • J'ai mis à jour la question avec le code java
  • Qui semble bien pour moi. Je ne peux pas trouver à redire.

InformationsquelleAutor 6opuc | 2012-05-14