J'ai un code Fortran que mon client me donne il y a plusieurs mois, nous avons fait l'implémentation C (JNI) avec la déclaration de Fortran comme méthode externe et ensuite nous pouvons appeler fortran de C et maintenant nous pouvons appelez C depuis JAVA.Erreur dans java jni natif
Il fonctionne très bien (presque :)) en fait dans 1 de 8 bibliothèque, parfois nous avons un segfault avec
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
Je ne sais pas ce qui peut causer un long double restrict
?
la valeur d'un résultat est plus grande qu'un long double? ou autre chose?
Si quelqu'un peut m'aider à me montrer le bon moyen de trouver ma solution, j'apprécierai.
beaucoup. PS: je ne veux pas savoir si mon code est correct ou non car tout fonctionne bien depuis plusieurs mois, donc je ne poste pas de code ici, mais je veux juste connaître la cause potentielle d'un long problème de double restriction ;)
EDIT1
Enfin je trouve ma solution, je suppose. J'ai mis le log dans fortran et pour une raison que je ne comprends pas maintenant, parce que le code n'est pas de moi et je ne sais rien de fortran, j'ai une valeur qui était 1 dans beaucoup de temps et parfois ceci La valeur est 1078334587, donc je vais renvoyer le code au client et l'homme qui a écrit ce code peut le corriger.
Je pense que c'est une valeur non initialisée qui a été obtenue par fortran et l'adresse contient une grande valeur en mémoire et cause sigsev!
Vous avez jeté un coup d'œil à [this] (http://stackoverflow.com/questions/28403852/jvm-crash-due-to-sigsegv)? – Youka
oui je trouve 2 ou 3 sujet à ce sujet sur débordement de pile mais personne n'explique clairly long double restrict. Tous les sujets donnent une solution pour essayer de résoudre le problème de segfault, mais il est trop générique, moi je veux comprendre la cause avant de tester tout le chemin. Et enfin j'ai ajouter le log dans le code fortran, et je vois qu'une valeur dans beaucoup de cas est 1 et pour une raison quelconque cette valeur devient '1078334587' je pense que c'était une valeur dans la mémoire qui n'est pas réinitialisée. mais avec cela, je pense que le problème est que la valeur est plus grande que l'objet et provoquer sigsev. –