簡體   English   中英

從本機函數(c ++,jni)返回一個int會導致應用程序崩潰

[英]Returning an int from native function(c++, jni) crashes application

試圖弄清楚為什么c ++函數調用返回一個int會崩潰整個應用程序而不會出現任何錯誤/警告。

這是工作代碼:


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

此代碼在沒有警告的情況下崩潰應用程序:


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

在應用程序崩潰之前,我可以在log cat中看到我的日志消息(__ android_log_print)

編輯:即使我用“1”替換“數字+測試”,應用程序仍然崩潰......它只有在我返回“數字”時才有效...

編輯#2:Java端代碼:


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");
    }
}
jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
    JNIEnv * env, jobject obj, jint number)

public native Integer next(Integer number);

不符合。 Integer是一個Object,而int是一個原語。

如果您的本機代碼使用jint ,那么您的java代碼應該在本機方法的聲明中使用int

(如果你希望傳遞一個Integer,你需要將它視為本機的一個jobject,並跳過箍來訪問它 - 它可能更容易使用int / jint並在Integer中進行任何必要的轉換。 java方面)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM