Bonjour,

Je viens de débugé une DLL écrite en C pour une application Java. Cette dll provoquait des crash (non systématique) de l'application Java lors de l'initialisation :
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7706e3be, pid=476, tid=4880
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_13-b05 mixed mode)
# Problematic frame:
# C [ntdll.dll+0x2e3be]
#
Après un peu de temps, la cause du crash s'est rapprochée des lignes suivantes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
char * sChemin = NULL;
char nomIni[250]="\0"; 
sChemin = sC_GEN_AddSepToDirectory(nomFichier);
strcat(sChemin,"MONFICHIER.INI");
En sachant que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
FCT_EXP char * sC_GEN_AddSepToDirectory(char * _sChemin) {
// L'implémentation de la méthode ...
}
En comparant avec le reste du code C à ma disposition dans cette DLL, j'ai mis le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
char sChemin[250] = "\0";
strcpy(sChemin,sC_GEN_AddSepToDirectory(nomFichier));
printf(sChemin);
strcat(sChemin,"MONFICHIER.INI");
Après une série d'essai, je n'ai plus de crash de l'application avec la DLL corrigé.

Ma question est pourquoi la DLL provoquait un crash ?

Cordialement,
Patrick Kolodziejczyk.