2013-12-13 2 views
0

Итак, я решил сделать импорт dll в код java.C-JNI возвращает 2D int массив как JobjectArray

Что это такое - вычисление соседней матрицы. Проблема в том, что я понятия не имею, как вернуть матрицу как jobjectArray.

JNIEXPORT jobjectArray JNICALL Java_src_pathfinder_PathFinder_neighbourMatrixGenerator (JNIEnv * env, jobject b,...) { 
    int i,j; 
    BOOL tt=1; 

    jclass intClass = (*env)->FindClass(env, "java/lang/Integer"); 
    jobjectArray row; 
    jobjectArray rows; 

    int **matrix = (int**)calloc(size, sizeof(int*)); 

    for(i = 0; i < size; i++) { 
     matrix[i] = (int *) calloc(size, sizeof(int)); 
    } 

    for(i=0; i<size; i++) { 
     row = (*env)->NewObjectArray(env, size, intClass, 0); 

     for(j=0; j<size; j++) { 
      (*env)->SetObjectArrayElement(env, row, j, (jobject)matrix[i][j]); // this line is 100% broken 
     } 

     if(tt==1) { 
      tt=0;rows = (*env)->NewObjectArray(env, size, (*env)->GetObjectClass(env, row), 0); 
     } 

     (*env)->SetObjectArrayElement(env, rows, i, row); 
    } 

    return rows; 
} 

ошибки я получаю: журнал

Loaded generator.dll 
counted total rects: 75 
# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x621e8551, pid=5336, tid=5704 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0-b75) (build 1.8.0-ea-b75) 
# Java VM: Java HotSpot(TM) Client VM (25.0-b17 mixed mode windows-x86) 
# Problematic frame: 
# V [jvm.dll+0xc8551] 
# 
# Failed to write core dump. Minidumps are not enabled by default on client vers 
ions of Windows 
# 
# An error report file with more information is saved as: 
# C:\HnH\hs_err_pid5336.log 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.sun.com/bugreport/crash.jsp 
# 

ошибка: http://wklej.to/1T2tW

я был бы рад за любые подсказки, что может быть плохого в этом, как это темная магия для меня

+0

Array (s) в Java - это объекты. –

ответ

0

Кажется, что матрица представляет собой pSize * pSize, тогда вам нужен новый массив pSize во-первых для возврата, затем новый массив и сохранение в returnArray [i] и возврат первого массива.

BTW, код, показанный здесь, является хорошим кандидатом для чистой реализации java. Я думаю, что производительность может быть даже лучше, если ее часто называют.

Смежные вопросы