IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[JNI]exception_access_violation : tableau string


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut [JNI]exception_access_violation : tableau string
    salut,

    eh bien voila un message d'erreur qui fait pas plaisir, je suis sur jbilder2005, je me suis fait plaisir avec un peu de JNI, et quand j'arrive enfin à lancer ma dll, voila le joli message qui s'imprime dans un fichier .log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at PC=0x80717B9
    Function=[Unknown.]
    Library=F:\boulot\prog\jbuilder\jdk1.4\jre\bin\client\jvm.dll
     
    NOTE: We are unable to locate the function name symbol for the error
          just occurred. Please refer to release documentation for possible
          reason and solutions.
     
     
    Current Java thread:
    	at calcul.imgAnalysis.compute(Native Method)
    	at control.Controleur.main(Controleur.java:32)
     
    Dynamic libraries:
    0x00400000 - 0x00407000 	F:\boulot\prog\jbuilder\jdk1.4\bin\javaw.exe
    0x7C910000 - 0x7C9C7000 	C:\WINDOWS\system32\ntdll.dll
    0x7C800000 - 0x7C904000 	C:\WINDOWS\system32\kernel32.dll
    0x77DA0000 - 0x77E4C000 	C:\WINDOWS\system32\ADVAPI32.dll
    0x77E50000 - 0x77EE1000 	C:\WINDOWS\system32\RPCRT4.dll
    0x77D10000 - 0x77DA0000 	C:\WINDOWS\system32\USER32.dll
    0x77EF0000 - 0x77F36000 	C:\WINDOWS\system32\GDI32.dll
    0x77BE0000 - 0x77C38000 	C:\WINDOWS\system32\MSVCRT.dll
    0x76320000 - 0x7633D000 	C:\WINDOWS\system32\IMM32.DLL
    0x62DC0000 - 0x62DC9000 	C:\WINDOWS\system32\LPK.DLL
    0x753C0000 - 0x7542B000 	C:\WINDOWS\system32\USP10.dll
    0x08000000 - 0x08138000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\client\jvm.dll
    0x76AE0000 - 0x76B0F000 	C:\WINDOWS\system32\WINMM.dll
    0x10000000 - 0x10007000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\hpi.dll
    0x00940000 - 0x0094E000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\verify.dll
    0x00950000 - 0x00969000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\java.dll
    0x00970000 - 0x0097D000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\zip.dll
    0x6BEC0000 - 0x6BED6000 	F:\boulot\prog\tmp\cell_img\analysis.dll
    0x02D80000 - 0x02E8F000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\awt.dll
    0x72F50000 - 0x72F76000 	C:\WINDOWS\system32\WINSPOOL.DRV
    0x774A0000 - 0x775DC000 	C:\WINDOWS\system32\ole32.dll
    0x5B090000 - 0x5B0C8000 	C:\WINDOWS\system32\uxtheme.dll
    0x030F0000 - 0x03140000 	F:\boulot\prog\jbuilder\jdk1.4\jre\bin\fontmanager.dll
    0x736B0000 - 0x736F9000 	C:\WINDOWS\system32\ddraw.dll
    0x73B10000 - 0x73B16000 	C:\WINDOWS\system32\DCIMAN32.dll
    0x73890000 - 0x73960000 	C:\WINDOWS\system32\D3DIM700.DLL
    0x03200000 - 0x0334E000 	C:\Program Files\Messenger Plus! 3\MsgPlusH1.dll
    0x58B50000 - 0x58BE7000 	C:\WINDOWS\system32\COMCTL32.dll
    0x76340000 - 0x7638A000 	C:\WINDOWS\system32\comdlg32.dll
    0x77F40000 - 0x77FB6000 	C:\WINDOWS\system32\SHLWAPI.dll
    0x7C9D0000 - 0x7D1F2000 	C:\WINDOWS\system32\SHELL32.dll
    0x770E0000 - 0x7716C000 	C:\WINDOWS\system32\OLEAUT32.dll
    0x77390000 - 0x77492000 	C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
    0x74690000 - 0x746DB000 	C:\WINDOWS\system32\MSCTF.dll
    0x75140000 - 0x7516E000 	C:\WINDOWS\system32\msctfime.ime
    0x76C40000 - 0x76C68000 	C:\WINDOWS\system32\imagehlp.dll
    0x5D3F0000 - 0x5D491000 	C:\WINDOWS\system32\DBGHELP.dll
    0x77BD0000 - 0x77BD8000 	C:\WINDOWS\system32\VERSION.dll
    0x76BA0000 - 0x76BAB000 	C:\WINDOWS\system32\PSAPI.DLL
     
    Heap at VM Abort:
    Heap
     def new generation   total 576K, used 346K [0x10010000, 0x100b0000, 0x104f0000)
      eden space 512K,  55% used [0x10010000, 0x10056830, 0x10090000)
      from space 64K, 100% used [0x100a0000, 0x100b0000, 0x100b0000)
      to   space 64K,   0% used [0x10090000, 0x10090000, 0x100a0000)
     tenured generation   total 1408K, used 119K [0x104f0000, 0x10650000, 0x14010000)
       the space 1408K,   8% used [0x104f0000, 0x1050dc58, 0x1050de00, 0x10650000)
     compacting perm gen  total 4096K, used 3343K [0x14010000, 0x14410000, 0x18010000)
       the space 4096K,  81% used [0x14010000, 0x14353f10, 0x14354000, 0x14410000)
     
    Local Time = Tue Nov 30 20:54:01 2004
    Elapsed Time = 1
    #
    # HotSpot Virtual Machine Error : EXCEPTION_ACCESS_VIOLATION
    # Error ID : 4F530E43505002EF
    # Please report this error at
    # http://java.sun.com/cgi-bin/bugreport.cgi
    #
    # Java VM: Java HotSpot(TM) Client VM (1.4.2_04-b05 mixed mode)
    #
    desolé c un peu long.....

    alors la je suis dépassé par les évenements : ça vient d'où? de mon code JNI en c++? de mes librairies java?

    si vous voulez voir mon code demandez, ms c un peu long....

    merci a celui qui réussira ou du moins essaiera a m'aider..... :o

  2. #2
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    calcul.imgAnalysis.compute
    ceci correspondrait t-il par hasard a une fonction que tu as developpé en c++?

    je n'ai jamais utilisé jni mais je pense que ca peut venir de ta dll analysis

    Exception_acces_violation => google

    ==> apparemment plein de sources d'erreurs possible je peux pas t'en dire plus a la limit quelqu'un qui connait JNI et qui verrait ton code
    essaie deja de mettre tes entetes c++ et les appels corespondant pour la librairie analysis

    a moins qe tu essaie de faire un appel a une fonction java depuis le code c++ enfin je vais t'embrouiller paerceque je suis pas du tout sur de ce que je dis

    bonne chance

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    salut,

    j'ai pas mal décortiqué mon code, et le probleme viens du code cpp qui correspond à l'implementation de la fonction native.

    alors voila une petite fonction plus simple que la fonction originale mais sur laquelle j'ai réussi à isoler le pb. Cette fonction prend en param un tableau de String du coté java et renvoie un tableau d'entier. Le renvoie du tableau d'entier fonctionne, mais c au niveau du tableau de String que foire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    JNIEXPORT jintArray JNICALL Java_calcul_imgAnalysis_tester
      (JNIEnv *envir, jobject object, jobjectArray zhu)
      {
      jsize tab_len = envir->GetArrayLength(zhu);
      jstring* tab = (jstring*)envir->GetObjectArrayElement(zhu, 0); 
      char** input_files = (char**)malloc(((int)tab_len)*sizeof(char*));  
     
      int i;
      for (i=0; i<tab_len; i++) {
          const char* str = (char*)envir->GetStringUTFChars(tab[i], 0);
          printf("%s",str);   
          envir->ReleaseStringUTFChars(tab[i], str);
          }
     
      int bozo[2] = {1,2};
      jintArray res = (jintArray)envir->NewIntArray(2);
      envir->SetIntArrayRegion((jintArray)res,(jsize)0,2,(jint *)bozo);
      return(res);
      }
    c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     const char* str = (char*)envir->GetStringUTFChars(tab[i], 0);
    qui fait tout foirer à l'execution, sans elle ça tourne.
    ALors si qqn caler en JNI peut me dire ce qui va pas, parceque là je vois pas....
    8) merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    eh bien apres des heures de travail, de fouinage sur le net j'ai enfin réussi à faire marcher ce de programme. Je sais pas vraiment pourquoi ça marche maintenant et pas avant, j'ai essayé plein de truc qui marchait selon leurs auteurs mais qui foiraient chez moi. Et voila après pas mal de modif ça marche enfin!

    alors si ça peut aider qqn voila mon nouveau code (il est quand même + beau que celui d'avant )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    JNIEXPORT jintArray JNICALL Java_calcul_imgAnalysis_compute
      (JNIEnv *envir, jobject object, jobjectArray String_tab)
    {
     
      jsize tab_len = envir->GetArrayLength(String_tab);
      char** input_files = (char**)malloc(((int)tab_len)*sizeof(char*));  
      int i,j;
      for (i=0; i<tab_len; i++) 
      {
          jstring jstr = (jstring)envir->GetObjectArrayElement(String_tab, i);
          if (jstr==NULL)
          {
                printf("m");
          }
          else 
          {
                int len = envir->GetStringLength(jstr);
                input_files[i] = (char*) malloc(envir->GetStringUTFLength(jstr));
                envir->GetStringUTFRegion(jstr, 0, len, input_files[i]);
                printf("%s",input_files[i]);
          }
      }
    int* res = calcul_progression((char**)input_files,(int)tab_len);
      jintArray jres = (jintArray)envir->NewIntArray(tab_len);
      envir->SetIntArrayRegion(jres,0,tab_len,(jint*)res);
      return(jres);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2007, 17h26
  2. Réponses: 2
    Dernier message: 16/06/2006, 09h15
  3. convertir tableau String en Collection
    Par guilhemr dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/04/2006, 13h56
  4. [C#][debutant] tableau String sans donner la taille ?
    Par Sylk dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/11/2005, 20h42
  5. [Débutant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 14/05/2004, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo