[英]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.