当前位置: 首页 > 知识库问答 >
问题:

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

商棋
2023-03-14

我向类添加了一个方法,以返回以null结尾的字节集。我希望在java中返回一个字节[],由于这一更改,该函数在返回字节方面似乎工作得很好,但jvm在退出时出现segv崩溃。我打印了输出中显示的“exiting main”,然后出现了segv

C类

class squid {
 const signed char* getBytes()
}

斯奎德

%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运行时环境(构建pxa6470sr5-20130619\U 01(SR5))IBM J9 VM(构建2.6,JRE 1.7.0 Linux amd64-64压缩引用20130617\U 152572(启用JIT,启用AOT)J9VM-R26\U Java726\U SR5\U 20130617\U 1436\U B152572 JIT-r11。b04\U 20130528\U 38954ifx1 GC-R26\U Java726\U SR5\U 20130617\U 1436\U B152572\U CMPRSS J9CL-20130617\U 152572)JCL-20130616\U 01基于Oracle 7u25-b12

共有2个答案

宗政浩慨
2023-03-14

事实证明,这是与本机世界中仍然存在的其他线程的交互,而与java无关。

史钊
2023-03-14

看看java/typemaps。i来自SWIG分布。可能它已经包含了所需的类型映射。检查参考实现的输出类型映射或输入类型映射。

 类似资料:
  • 问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味

  • 我想使用swig从C附加到Javabyte[]。诀窍是在不调用GetByteArrayElements的情况下执行此操作,因为如果无法固定byte[],这将生成byte[]的副本。 没有swig,我们可以使用SetByteArrayArea轻松做到这一点-直接将字节数写入byte[]。swg的问题是: > 执行实际工作的代码在. cpp中-例如读取文件的内容并将其放入字符串fileContents

  • 我正在尝试为redis启动一个服务文件,我读了很多关于将其作为systemd服务运行的帖子,我不知道为什么会发生这种情况。 当我运行sudo systemctl启动redis服务器时。服务它不会返回/退出-只是坐在那里,光标闪烁,直到我按下Ctrl-C键。我已经确认服务器已启动并运行,因此服务器似乎工作正常-我不确定为什么systemctl start从不退出。Redis旨在使用systemd和参

  • 本文向大家介绍ionic2.0双击返回键退出应用,包括了ionic2.0双击返回键退出应用的使用技巧和注意事项,需要的朋友参考一下 最近才把ionic的版本更新到2.0,所以便想感受一下2.0版本带来的新体验。 看了官方网站以及网上的各种介绍后,才知道这2.0版本结合了TypeScript和ES6,和1.0+版本有很大的不同,所以在此记录下使用2.0版本开发应用的过程与代码。此文就是介绍在2.0版

  • 我的情况是,我有一个C类(MyClass),其方法具有以下签名: 其中name是in参数,serialized是out参数。 我通过在“I”文件中进行%extend和%ignore声明来实现它,如下所示: 因此,可以使用类似Java的方法: 但现在我遇到了一个问题,序列化的std::字符串包含二进制数据,包括表示C字符串结尾的“\0”字符,实际上以下代码显示了C中的问题: 上述代码显示: 正如我在

  • 在我的应用程序中,我想在按下后退按钮时退出应用程序,这是我的代码: 它工作正常,但当我退出应用程序时,它不会完全退出,并显示带有我的应用程序徽标的空白页面,当我再次按下后退按钮退出应用程序,我如何修复它??? 编辑: 我使用这个代码而不是上面的代码,但我的应用程序完全退出,但我希望它在后台运行并且不完全退出,我该怎么做?