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 :

problème avec une destruction de struct


Sujet :

C++

  1. #1
    Membre éprouvé
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Par défaut problème avec une destruction de struct
    Bonjour à toutes et tous,

    Je me tourne vers vous car j'ai un problème que je n'arrive pas à résoudre...

    Mon code ressemble à ceci :
    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
     
    class A
    {
    public:
    	struct B
    	{
    		int i;
    		int j;
    		int k;
    	};
     
    	struct C
    	{
    		/*
    		des tas de choses
    		*/
    		vector<B> vecB;
    	};
     
    	/*
    	des tas de choses
    	*/
     
    protected:
    	map<string, C> mapC;
     
    };
    Je ne vous mets pas tout car le problème n'apparait qu'à la fermeture de l'application, la compilation et l’exécution fonctionnent sans problème.

    Avec le débogueur j'ai trouvé que l'erreur était dans c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ext\new_allocator.h:110,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
          }
     
          // __p is not permitted to be a null pointer.
          void
          deallocate(pointer __p, size_type)
          { ::operator delete(__p); }    //ligne 110
    De plus, le débogueur m'indique que cela se produit sur un objet de type struct B.

    Il me semble donc comprendre qu'il y a problème de destruction soit avec map<string, C> soit avec vector<B>Si vous avez une idée ou une piste, je suis preneur, d'avance merci.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Salut!

    La vérité est ailleurs, je dirais...
    Passe un coup de Valgrind sur ton programme pour vérifier si tu n'aurais pas des corruptions de mémoire.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre éprouvé
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Par défaut
    Merci dragonjoker59, pour ta réponse rapide et la découverte de cet outil!

    Aurais-tu le même pour Windows?


    EDIT: j'ai trouvé "DrMemory", je le télécharge/installe/exécute et vous tiens au courant

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Ca sent plutôt le double delete. Rien dans le "code" que tu présentes.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éprouvé
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Par défaut
    Merci Bousk,

    la piste du double delete est intéressante mais le truc c'est que je n'utilise aucun new/delete dans mon code.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ca peut venir du destructeur de C, en effet.
    Est-ce que par hasard, C contient un pointeur qui est copié, mais dont il provoque le delete?

    L'erreur est à cet endroit, certes, mais il faut remonter la pile de destructeur pour voir plus clair

  7. #7
    Membre éprouvé
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Par défaut
    Merci leternel pour la réponse,

    C'est bon j'ai trouvé grâce à vos pistes.

    Dans une de mes fonctions, je créai un vector temporaire que j’assignai ensuite à celui de la struct C, j'ai fais un swap entre les deux et le problème est réglé.

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

Discussions similaires

  1. Problème avec une UDF
    Par kanmaber dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/08/2004, 23h42
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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