使用SWIG将多维int数组从Java传递到C(并返回)

时间:2014-08-05 12:45:02

标签: java arrays swig

我需要从Java调用一个C函数,它接受一个二维int数组作为输入。 C函数使用相同的数组来提供其输出。我使用SWIG提供的“array_functions”指令将bidimensional数组建模为int *数组:

%array_functions(int*, intArray);

正如预期的那样,SWIG会生成SWIGTYPE_p_p_int类型以及以下两个辅助函数:

public static int[] intArray_getitem(SWIGTYPE_p_p_int ary, int index) {
  return contrastJNI.intArray_getitem(SWIGTYPE_p_p_int.getCPtr(ary), index);
}

public static void intArray_setitem(SWIGTYPE_p_p_int ary, int index, int[] value) {
  contrastJNI.intArray_setitem(SWIGTYPE_p_p_int.getCPtr(ary), index, value);
}

我能够从Java分配SWIGTYPE_p_p_int类并写入它。但是,只要我尝试(从Java)访问数组的内容(如下例所示),我就会遇到分段错误异常:

            SWIGTYPE_p_p_int abc = contrast.new_intArray(1000);
            contrast.intArray_setitem(abc, 1, new int[100]);
            // invoke the C function passing it 'abc'
            int[] def = contrast.intArray_getitem(abc, 1);

据我所知,C函数能够读写'abc',没有任何问题。因此我尝试了第二个代码,在那里我取消了C部分,我仍然得到同样的错误:

            SWIGTYPE_p_p_int abc = contrast.new_intArray(1000);
            contrast.intArray_setitem(abc, 1, new int[100]);
            int[] def = contrast.intArray_getitem(abc, 1);

0 个答案:

没有答案