Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SWIG返回字节[],导致jvm在退出时segv_Java_C++_Jvm_Swig - Fatal编程技术网

Java 使用SWIG返回字节[],导致jvm在退出时segv

Java 使用SWIG返回字节[],导致jvm在退出时segv,java,c++,jvm,swig,Java,C++,Jvm,Swig,我向类添加了一个方法,以返回以null结尾的 字节集。我希望返回java中的字节[] 由于这一变化,该功能似乎起了作用 非常好地返回字节,但是 jvm在segv退出时崩溃。 我打印了输出中显示的“exiting main” 然后,segv发生了 C++类 class squid { const signed char* getBytes() } squidx.i %typemap(jni) const signed char* "jbyteArray" %typemap(jty

我向类添加了一个方法,以返回以null结尾的 字节集。我希望返回java中的字节[] 由于这一变化,该功能似乎起了作用 非常好地返回字节,但是 jvm在segv退出时崩溃。 我打印了输出中显示的“exiting main” 然后,segv发生了

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版本的结果

java版本“1.7.0” Java(TM)SE运行时环境(构建pxa6470sr5-20130619_01(SR5)) IBM J9虚拟机(版本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_CMPRS J9CL-20130617_152572)
JCL-20130616_01基于Oracle 7u25-b12

查看SWIG发行版中的
java/typemaps.i
。可能它已经包含了所需的类型映射。检查参考实现的
OUTPUT\u TYPEMAP
INOUT\u TYPEMAP

发现这是与本机世界中仍然存在的其他线程的交互
它与java毫无关系。

Nope typemaps。我只通过typemap(argout)处理指针