2013-11-20 30 views
0

我向類中添加了一個方法來返回一個以空字符結尾的 字節集。我希望在Java 返回一個byte []作爲這一變化的功能似乎工作 奇妙儘可能返回字節的結果,但在退出一個SEGV的 JVM崩潰。 我印刷 「退出主」,這在輸出 出現了,則發生SEGV使用SWIG返回Byte []導致jvm在退出時分段

C++類

class squid { 
const signed char* getBytes() 
} 

squidx.i

%typemap(jni) const signed char*  "jbyteArray" 
%typemap(jtype) const signed char*  "byte[]" 
%typemap(jstype) const signed char*  "byte[]" 
%typemap(out) const signed char* 
{ 
    long lSize = strlen($); 

    // create a new byte[] object in Java 
    jbyteArray data = JCALL1(NewByteArray, jenv, lSize); 

    // copy pixels from the image buffer 
    JCALL4(SetByteArrayRegion, jenv, data, 0, lSize, (jbyte*)result); 

    $result = data; 
} 

// change Java wrapper mapping for unsigned char* 
%typemap(javaout) const signed char* { 
    return $jnicall; 
} 

的java結果-version

Java版本「1.7.0」 Java(TM)SE運行環境(build pxa6470sr5-20130619_01(SR5)) IBM J9 VM(版本2.6,JRE 1.7.0 Linux的amd64-64壓縮參考20130617_152572(JIT啓用,啓用AOT) J9VM - R26_Java726_SR5_20130617_1436_B152572 JIT - r11.b04_20130528_38954ifx1 GC - R26_Java726_SR5_20130617_1436_B152572_CMPRSS J9CL - 20130617_152572) JCL - 20130616_01基礎在Oracle 7u25-B12

回答

0

採取從SWIG分佈看java/typemaps.i。可能它已經包含了所需的類型映射。對於參考實現,請檢查OUTPUT_TYPEMAPINOUT_TYPEMAP

+0

沒有typemaps.i只處理指針通過typemap(argout) – lkreinitz

0

原來,這是與在天然界仍然存在其他線程交互 它無關,與Java的。