我需要从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);