Cố gắng tìm ra lý do tại sao hàm C++ trả về một lỗi trong toàn bộ ứng dụng mà không có bất kỳ lỗi/cảnh báo nào.Trả về một hàm int từ hàm gốc (C++, jni) treo ứng dụng
đây đang làm việc mã:
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;
}
Và mã này bị treo ứng dụng mà không cần cảnh báo:
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;
}
Trước khi ứng dụng bị treo tôi có thể thấy thông tin đăng nhập của tôi (__ android_log_print) trong nhật ký mèo
EDIT: Thậm chí nếu tôi thay thế "kiểm tra số" bằng "1" thì ứng dụng vẫn bị lỗi ... Chỉ có wor ks nếu tôi trở về "số" ...
EDIT # 2: mã Java-side:
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");
}
}
ngăn xếp bị hỏng hoặc các loại vấn đề bộ nhớ khác? –
Lấy một bãi chứa từ JVM và xem chính xác những gì đang xảy ra. Dưới Hotspot có các tùy chọn để gỡ lỗi những vấn đề này - không có ý tưởng về android mặc dù. Mã ở đây là tốt, vấn đề là ở nơi khác. – Voo
Cảm ơn bạn đã trả lời nhanh, các bạn! Tôi sẽ cố gắng vào ngày mai ... – 6opuc