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

C Discussion :

Erreur d'adresse bizarre..!!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut Erreur d'adresse bizarre..!!
    Bonjour,

    voila, lorsque j'execute mon programme (sous borland c++ 5.01), à un moment donné j'ai l'erreur suivante :
    Thread stopped
    C:\....\...\vbdialog.exe : Fault :
    access violation at 0x77d268af : read of address 0x29


    Et lorsque je regarde l'état de la pile d'appel (call stack), en face de l'adresse 0x77d268af est affiché : C:\WINDOWS\system32\USER32.dll
    Et cette dll (USER32.dll) est associée à plusieurs adresses, et c'est la seule présente dans la pile d'appel...

    Si qq'un a déjà vu ce genre d'erreur...de quoi cela peut venir ou à quoi ça correspond..? parce que là je ne sais plus trop quoi faire...

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    tu dois avoir un pointeur invalide dans un coin que tu passes (indirectement) à une fonction de la DLL d'où l'erreur
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    Bien merci, je vais regarder,
    mais cette dll je ne l'appelle à aucun moment dans mon code, j'imagine que c'est borland qui l'utilise..

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Très certainement, c'est une des DLL de base de l'API Windows
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    Ben, je ne trouve pas l'erreur, voila il me semble que cela vient de ce code là :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    #include <windows.h>
    #include <windowsx.h>
    #include <stdio.h>
    #include "vbdialog.h"
    #pragma hdrstop
     
     
    static HINSTANCE hInst;
     
    //déclaration des fonctions de la DLL
    typedef int (WINAPI *DLL_X_LEC_ART_CLE_DTA)(WORD,WORD,LPSTR,WORD,LPSTR,LPSTR);
    DLL_X_LEC_ART_CLE_DTA X_LEC_ART_CLE_DTA;
     
     
    LONG FAR PASCAL SamplesDialog (HWND hWnd,WORD wMsg,WORD wParam,LONG lParam)
    {
        char *code_fichier,*code_index,*lgcle,*code_fich_ind,*bufferDest;
        char cle_rech[20],path[20];
        short *codes;
        int *longCle;
     
      //chargement de la dll
       HMODULE hDLL = LoadLibrary("DLL.dll");
     
       X_LEC_ART_CLE_DTA = (DLL_X_LEC_ART_CLE_DTA)GetProcAddress(hDLL,"X_LEC_ART_CLE_DTA");
     
     
      // process the message
      switch( wMsg )
      {
        // process command from one of the child controls
        case WM_COMMAND:
          switch( GET_WM_COMMAND_ID(wParam,lParam) )
          {
            // ok or cancel, so end the dialog
            case IDOK:
             	code_fichier = calloc(1,1);
    				code_index = calloc(1,1);
                lgcle = calloc(1,1);
                code_fich_ind = calloc(3,1);
                bufferDest = calloc(1,1);
     
                GetDlgItemText(hWnd,IDC_CODEFICHIER,code_fichier,2);
    	         GetDlgItemText(hWnd,IDC_CODEINDEX,code_index,2);
                GetDlgItemText(hWnd,IDC_LGCLE,lgcle,3);
                GetDlgItemText(hWnd,IDC_CLERECH,cle_rech,20);
                GetDlgItemText(hWnd,IDC_PATH,path,20);
     
                *code_fich_ind = *code_fichier;
                strcat(code_fich_ind,code_index);
                codes = &code_fich_ind[0];
                *longCle = atoi(lgcle);
     
     
             	if(X_LEC_ART_CLE_DTA(*longCle,*codes,cle_rech,5,path,bufferDest)==0)
                {
                	//SetDlgItemText(hWnd,IDC_MSG,code_fich_ind);
                	//MessageBox( NULL,"ok", NULL, MB_OK | MB_APPLMODAL );
     
                   free(code_fichier); code_fichier=NULL;
                	free(code_index); code_index=NULL;
                	free(lgcle); lgcle = NULL;
                	free(code_fich_ind); code_fich_ind=NULL;
                	free(bufferDest); bufferDest=NULL;
                	break;
                }
                else
                {
                	MessageBox( NULL,"probleme ouverture fichier" , NULL, MB_OK | MB_APPLMODAL );
                   free(code_fichier); code_fichier=NULL;
                	free(code_index); code_index=NULL;
                	free(lgcle); lgcle = NULL;
                	free(code_fich_ind); code_fich_ind=NULL;
                   free(bufferDest); bufferDest=NULL;
                   break;
                }
     
             case IDCANCEL:
    	  EndDialog(hWnd, 0 );
    	  break;
          }
          break;
     
        // initialize the dialog
        case WM_INITDIALOG:
        	return FALSE;
      }
      FreeLibrary(hDLL);
      return FALSE;
    }
     
    // Turn off warning: Parameter * is never used in function WinMain...
    #pragma argsused
     
    int PASCAL WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)
    {
      // save the instance
      hInst = hInstance;
     
      // load the samples dialog box
      if( DialogBox( hInstance, "Samples", NULL, (FARPROC)SamplesDialog ) == -1 )
        MessageBox( NULL, "Can't load dialog box!\n", NULL, MB_OK | MB_APPLMODAL );
     
      // end of program
      return 0;
    }
    Volia si qq'un voit qq'chose d'anormal...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    DialogBox( hInstance, "Samples", NULL, (FARPROC)SamplesDialog )
    1°) Un cast sur un pointeur de fonction, c'est toujours suspect.

    2°) Tes types sont obsolètes. SURTOUT le WORD pour wParam (quand wParam est un pointeur (enfin ici ça a l'air de ne jamais être le cas, et tu n'appelles pas DefWindowProc()), c'est le plantage assuré).

    3°) Ta fonction de DLL a un nom illisible, qu'on confond avec le typedef : Les noms de fonction en majuscules, c'est pas conseillé : On utilise plutôt l'UpperCamelCase.

    4°) Un strcat(), ça peut être dangereux quand strncat() existe. (encore que, je conseillerais plutôt les fonctions de <strsafe.h>)

    5°) Tu charges et tu libères ta DLL à CHAQUE MESSAGE ?

    6°) J'ai trouvé l'erreur! GetDlgItemText() avec des tailles trop grandes pour tes buffers (ils ne font qu'un seul octet, et toi tu y mets 2 voire 3 caractères, carac nul compris),
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Erreur de compilation bizarre
    Par Florian.L dans le forum C
    Réponses: 3
    Dernier message: 11/05/2007, 18h31
  2. Erreur sur adresse rtl60.bpl
    Par Xavier dans le forum C++Builder
    Réponses: 10
    Dernier message: 11/01/2007, 12h07
  3. Des adresses bizarres
    Par kagura dans le forum Langage
    Réponses: 7
    Dernier message: 02/11/2006, 15h38
  4. erreur ORA-01400 bizarre
    Par fpouget dans le forum Oracle
    Réponses: 4
    Dernier message: 31/08/2006, 10h48
  5. [SQL] Erreur de parse bizarre...
    Par TommyWeb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/02/2006, 00h54

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