Ваш текущий код, когда я пишу это:
JNIEXPORT jobjectArray JNICALL myMethod(JNIEnv *env, jclass, //parameters){
int** result = //my function to obtain a matrix n x m of integers
std::vector<jint> tmp;
//fill the vector tmp with matrix integers and deallocate the matrix
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
tmp[m*i + j] = result[i][j];
}
free(result[i]);
}
free(result);
jintArray jResults = env->NewIntArray( tmp.size() );
env->SetIntArrayRegion( jResults, 0, tmp.size(), &tmp[0] );
return env->NewObjectArray(tmp.size(), env->GetObjectClass(jResults), 0);
}
В этом коде вы получаете доступ к различным элементам вектора нулевого размера tmp
.
A std::vector
не является ассоциативным массивом;это обычный непрерывный массив.Следовательно, вам нужно либо изменить его размер заранее, либо использовать метод push_back
для добавления новых элементов.Вы можете указать размер как этот:
std::vector<jint> tmp( m*n );
Cheers & hth.,