java jni本机中的错误

java jni本机中的错误,java,c,java-native-interface,Java,C,Java Native Interface,我有一个Fortran代码,我的客户在几个月前给了我,我们用Fortran作为外部方法进行了C实现(JNI),然后我们可以从C调用Fortran,现在我们可以从JAVA调用C 它工作得非常好(几乎:)。事实上,在8个库中的1个库中,有时我们会遇到一个错误 Stack: [0x00007f1ea63fc000,0x00007f1ea6afd000], sp=0x00007f1ea6af8f30, free space=7155k Native frames: (J=compiled Java

我有一个Fortran代码,我的客户在几个月前给了我,我们用Fortran作为外部方法进行了C实现(JNI),然后我们可以从C调用Fortran,现在我们可以从JAVA调用C

它工作得非常好(几乎:)。事实上,在8个库中的1个库中,有时我们会遇到一个错误

Stack: [0x00007f1ea63fc000,0x00007f1ea6afd000],  sp=0x00007f1ea6af8f30,  free space=7155k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libCMordor.so+0x5240]  long double restrict+0xcac
C  [libCMordor.so+0x1f84]  unsigned long+0xbc8
我不知道什么会导致
长时间双重限制

一个结果的值是否大于一个长双精度?还是别的什么

如果有人能帮我找到解决问题的好方法,我将不胜感激

泰克人很多

PS:我不想知道我的代码是否正常,因为经过几个月的工作,所有代码都很好,所以我不在这里发布代码,但我只想知道长时间双重限制问题的潜在原因;)

编辑1

我想我终于找到了解决办法

我已经把日志放到fortran中了,由于一个我现在不明白的原因,因为代码不是我写的,我对fortran一无所知,很多时候我有一个值是1,有时这个值是1078334587,所以我会将代码重新发送给客户机,编写此代码的人可以纠正这一点


我认为这是一个从fortran获取的未初始化值,地址在内存中包含一个大值,并导致sigsev

最后,这里的问题是fortran中的一个未初始化变量!该变量获取内存中的值,并说“长双限制”,然后发送SIGSEV信号。我已经初始化了值,现在一切正常。为了找到这个问题,因为它不是我的代码,我把write放进去告诉我问题在哪里


这就解释了为什么程序可以随机工作。

最后,这里的问题是fortran中的一个未初始化变量!该变量获取内存中的值,并说“长双限制”,然后发送SIGSEV信号。我已经初始化了值,现在一切正常。为了找到这个问题,因为它不是我的代码,我把write放进去告诉我问题在哪里


这就解释了为什么程序可以随机工作。

你看了吗?是的,我找到了两个或三个关于堆栈溢出的主题,但没有人解释clairly long double restrict。所有受试者都给出了解决segfault问题的解决方案,但它太笼统了,我想在测试之前以不同的方式了解根本原因。最后,我在fortran代码中添加了log,在很多情况下,我看到一个值是1,不管出于什么原因,这个值变成了“1078334587”,我认为它是内存中一个没有重新初始化的值。但有了这个,我认为问题在于,这个值比对象大,导致sigsev。你看了吗?是的,我找到了2或3个关于堆栈溢出的主题,但没有人解释clairly long double restrict。所有受试者都给出了解决segfault问题的解决方案,但它太笼统了,我想在测试之前以不同的方式了解根本原因。最后,我在fortran代码中添加了log,在很多情况下,我看到一个值是1,不管出于什么原因,这个值变成了“1078334587”,我认为它是内存中一个没有重新初始化的值。但有了这个,我认为问题在于这个值大于这个对象,并导致sigsev。