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 :

Access violation at address XXX in module BORLNDMM.DLL


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut Access violation at address XXX in module BORLNDMM.DLL
    Bonjour à tous,

    Voici mon premier message sur ce forum. Avant de commencer, WoW! ce site est merveilleux.

    Voilà, je suis en train de faire un optimiseur d'espace pour des rectangles (ou carrés) à placer dans une "boîte" plus grande. J'ai fait la première version en mode console, tout va bien. Je copie l'algorithme dans un éditeur plus complet afin d'y inclure un interface graphique pour l'utilisateur et il m'arrive un erreur :

    Access violation at address 211A46A3 in module BORLNDMM.DLL Read of address 43480000

    Quand je mets des breakpoint dans le code, je réussis à trouver l'endroit où survient problème et surprise, il se situe dans une portion du code que je n'ai pas modifié dans le transfert console/GUI.

    Quelqu'un a une idée sur ce que le message d'erreur signifie?

    Ma première idée serait que le programme tente d'accéder une plage mémoire qui ne lui ait pas réservée (dans ce cas-ci c'est un vecteur). Il se peut-il que le compilateur de Borland ne traite pas mon code de la même façon que celui de Dev-C++ et que CodeBlocks (parce sous ces deux logiciels mon programme version Console fonctionne très bien).

    Je sais que c'est un peu nébuleux comme description, mais c'est que mon programme comporte +1000 lignes et je ne désire pas le mettre ici.

    Bref, ma question concerne le message d'erreur.


    Merci de votre patience et merci à l'avance de votre aide,

    Antoine

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut Ajout
    Bien sûre, si vous voulez voir mon code je peux vous l'envoyer pour voir si vous avez le même problème.

    Merci,

    Antoine

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut Suite
    Bonjour à tous,

    Bon voilà, je n'ai trouver pourquoi cet erreur survenait, mais j'ai réussit à l'éliminée. C'est très étrange puisque je n'ai que réécrit le code différemment (c'était une boucle for) pour que ça fonctionne. Bien entendu, cette boucle fonctionnait préalablement lorsque compilée avec Dev-C++. Je ne comprend pas bien, mais c'est fini. Si vous savez ce qui peut causer ce problème, vous pouvez toujours le dire ici. Je suis certain que je vais rencontrer ce problème dans le futur alors...

    merci à tous,

    antoine

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    En clair, ton code est tombé en marche. Mais sans le code en question, impossible de t'aider...
    Et comme c'est du Borland, ce n'est pas le bon forum pour le poster.
    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.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par antoinelac Voir le message
    Bonjour à tous,

    Bon voilà, je n'ai trouver pourquoi cet erreur survenait, mais j'ai réussit à l'éliminée. C'est très étrange puisque je n'ai que réécrit le code différemment (c'était une boucle for) pour que ça fonctionne. Bien entendu, cette boucle fonctionnait préalablement lorsque compilée avec Dev-C++. Je ne comprend pas bien, mais c'est fini. Si vous savez ce qui peut causer ce problème, vous pouvez toujours le dire ici. Je suis certain que je vais rencontrer ce problème dans le futur alors...

    merci à tous,

    antoine
    Bonjour et bienvenu,
    Comme le dit Medinoc, ton code est 'tombé en marche', ce qui veut dire qu'il y a 90% de chance que ton bug subsiste mais que ces effets soient masqués dans le cadre des tests que tu as conduits. Si tu n'identifie pas ton problème originel tu prends le risque que cela te reviennes au pire moment (la veille de ta livraison) avec des conséquences imprévisibles...

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Merci de vos commentaires!

    J'ai bien peur que le "bug" revienne, mais d'un autre côté je fais ce programme que pour le plaisir de programmer (et surtout d'apprendre, je suis très novice en la matière). Je n'ai pas à le livrer à personne.

    Je suis désolé de m'être tromper de forum, je ne suis pas tout à fait habitué encore à tous ces topics.

    Merci à tous,

    Antoine

    (et pour ce qui est du code, je vous l'envoie sans problème, mais c'est pas beaucoup commenté...)

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut Code
    À bien y penser, je peux vous montrer le remplacement que j'ai fait pour que ça fonctionne :

    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
     
     
    vector<int> eraseVide; //Liste d'élément à effacer
    bool alert; //Indicateur servant à vérifier si faut ajouter ou non un élément à la liste
    int nbrVide;
     
    //boiteListe liste des boîtes
     
    //Détermine la quantité d'espace vide pour les boucles suivantes
    nbrVide = boiteListe[espaceOpt.boiteNum].espaceVide.size();
     
         //S'il existe plus d'un espace vide, vérifier s'il en n'existe pas des redondants
         if(nbrVide>1) //Plus d'un espace vide
         {
             //Pour tout espace J jusqu'à nombre total d'espace,
             for (j=0;j<nbrVide-1;j++)
             {
                 //Pour tout espace I jusqu'à nombre total d'espace,
                 for(i=j+1;i<nbrVide;i++)
    	     {
                 //Vérifie si les coordonnées de J et I sont identiques (doublon)
    			 if(boiteListe[espaceOpt.boiteNum].espaceVide[j].coord[0][0] == boiteListe[espaceOpt.boiteNum].espaceVide[i].coord[0][0]
                             && boiteListe[espaceOpt.boiteNum].espaceVide[j].coord[0][1] == boiteListe[espaceOpt.boiteNum].espaceVide[i].coord[0][1] 
    						 && boiteListe[espaceOpt.boiteNum].espaceVide[j].coord[1][0] == boiteListe[espaceOpt.boiteNum].espaceVide[i].coord[1][0]
                             && boiteListe[espaceOpt.boiteNum].espaceVide[j].coord[1][1] == boiteListe[espaceOpt.boiteNum].espaceVide[i].coord[1][1])
    			{
    			alert =0; //bool qui sert à ne pas ajouter //deux occurences du même espace vide
     
                             //Détermine si le doublon trouvé (coordonné identiques) existe déjà dans la liste à effacer (eraseVide)
     
                             for (k=0;k<eraseVide.size();k++)
                             {
                                 if(j==eraseVide[k])
                                 {
    				alert =1; //alert! il existe déjà, ne pas l'ajouter!!
                                 }
                             }
                             //S'il n'existe pas déjà..
                             if (alert ==0)
                             {
    				eraseVide.push_back(j); //Ajoute le dans la liste
                             }
                     }
                 }
             }
         }
     
         sortInt(eraseVide); //Classe en ordre numérique le vecteur (plus petit au plus grand)
     
         for (j=0;j<eraseVide.size();j++)
         {
    	k =  eraseVide[j]-j;
           //Efface l'élément eraseVide[j]-j de la liste d'espace vide
    	  boiteListe[espaceOpt.boiteNum].espaceVide.erase(boiteListe[espaceOpt.boiteNum].espaceVide.begin()+k);
          }
    Je ne trouve pas que c'est très beau, ce qui ne m'encourage pas à mettre ce par quoi j'ai remplacer cette portion du code (surtout que la règle c'est 10 lignes max.).

    Pour ceux qui s'y attaqueront tout de même, voici une petite mise en contexte.

    J'effectue un programme qui optimise le placement de "portes" dans des boîtes d'emballage. Les grosseurs de portes et de boîtes peuvent variées de n'importe quelle façon (l'utilisateur entre les dimensions).

    Pour ce faire, je place un porte dans un boîte (coordonnées des coins). Ensuite, je divise l'espace restant avec des rectangles nommés "espaces vides". La portion présentées ci-haut, sert à éliminer les doublons (deux rectangle ayant les mêmes coordonnées). Avant de l'effacer, je garde en mémoire le numéro de cet espace à effacer dans un vecteur appelé "eraseVide". La première boucle sert à identifier les doublons ainsi que vérifier si ceux-ci ne sont pas déjà présent dans la liste à supprimer(bool alert). Finalement, j'efface les éléments dont les numéro se trouve dans le vecteur eraseVide.

    Ce code, bien que mal écrit (enfin selon moi) semble pourtant fonctionnel (sous Dev-C++), mais présente une erreur sous Borland.

    Pour pallier à l'erreur, j'ai déplacé la portion qui veille à ce qu'il n'y ait pas deux fois le même "espace vide" dans le vecteur eraseVide (bool alert) à l'extérieur de la boucle double for(i et j). Le programme ne plante plus, mais je comprend pas pourquoi.

    Merci de votre patience,

    Antoine

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par antoinelac Voir le message
    Ma première idée serait que le programme tente d'accéder une plage mémoire qui ne lui ait pas réservée (dans ce cas-ci c'est un vecteur). Il se peut-il que le compilateur de Borland ne traite pas mon code de la même façon que celui de Dev-C++ et que CodeBlocks (parce sous ces deux logiciels mon programme version Console fonctionne très bien).
    Quelle version de Borland ?
    Il est avéré que de nombreuses versions de Borland C++ ne respectent pas le standard (donc difficile d'en faire quelque chose).

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    La version que j'utilise est la suivante :

    CodeGear™ C++Builder® Version 11.0.2709.7128 Copyright © 2007 CodeGear™. All Rights Reserved.


    (copier/coller intégral)

    Merci,

    antoine

Discussions similaires

  1. Access violation at adress in module 'toad.exe'
    Par haykelFST dans le forum Toad
    Réponses: 1
    Dernier message: 19/09/2012, 09h26
  2. Access violation at adress in module 'toad.exe'
    Par haykelFST dans le forum Toad
    Réponses: 2
    Dernier message: 18/09/2012, 11h32
  3. access violation at adress 0057744.read of address 000000
    Par zanoubya dans le forum Débuter
    Réponses: 2
    Dernier message: 21/06/2010, 17h34
  4. Message Access violation at Address 004665B1
    Par Paounet dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/04/2008, 13h30
  5. access violation at address
    Par med1112 dans le forum Langage
    Réponses: 5
    Dernier message: 10/08/2007, 22h12

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