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 :

ERROR : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse =(


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Par d�faut ERROR : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse =(
    Bonjour � tous,

    Lorsque je run mon programme, voici les erreurs qui me sont retourn� :
    <gras>
    File:f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
    Expression : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

    File:f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
    _CrtIsValidHeapPointer(pUserData</gras>)

    J'ai chercher sur internet, c'est un probl�me de d�bordement de m�moire, ou autre, mais je ne vois pas d'erreur dans mon programme.
    En supprimant les lignes dans mon main, j'ai pu remarqu� que je n'avais pas d'erreur si je supprimais la ligne ci-dessous(marqu� en commentaire).
    J'ai donc cru que le probl�me venait du Constructeur/destructeur de Contenu. Sauf que je l'ai tester la classe dans le main, et je n'avais pas de probl�me.
    L'erreur ne pouvait donc venir que de la fonction creerSession, j'ai alors mit en commentaire la boucle for dans creerSession pour voir si le probl�me �tait la fct amie operator<< , mais le probl�me persistait.
    Il ne reste donc plus que ses lignes ci :

    Contenu contenu(aud,pre,obj,out,pl);
    lContenu.insert(lContenu.end(),contenu);

    Et je vois vraiment pas d'erreur.




    MAIN :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main()
    {
     
        Organsime organsime("adresse","nom",630,420,"email");
        Formation formation;
        organsime.affichage();
        formation.creerSession(18,11,1988,"rue de la station");
        Theme theme("Theme");
        theme.afficherTheme();
    	formation.creerContenu("audience","prerequis","objectifs","outils","plan");
     
        return 0;
    }
    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
     
    Ma classe contenu : 
     
    #ifndef CONTENU_H_INCLUDED
    #define CONTENU_H_INCLUDED
    #include "String.h"
    #include <iostream>
     
    using namespace std;
     
    class Contenu
    {
        private :
               char* audience;
               char* prerequis;
               char* objectifs;
               char* outils;
               char* plan;
        public :
     
        Contenu(const char*,const char*,const char*,const char*,const char*);
        void affichage();
        char* getAudience()const ;
        char* getPrerequis()const ;
        char* getObjectif()const;
        char* getOutil()const;
        char* getPlan()const;
     
        inline ~Contenu()
        {
            delete[] this->audience ;
            delete[] this->prerequis;
            delete[] this->objectifs ;
            delete[] this->outils ;
            delete[] this->plan ;
        }
     
     
    };
     
    #endif // CONTENU_H_INCLUDED
    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
    #include "Contenu.h"
     
    Contenu::Contenu(const char * aud,const char * pre,const char * obj,const char * out,const char * pl)
    {
     
    	this->audience=new char[strlen(aud)+1];
    	strcpy(this->audience,aud);
        this->prerequis=new char[strlen(pre)+1];
        strcpy(this->prerequis,pre);
        this->objectifs=new char[strlen(obj)+1];
        strcpy(this->objectifs,obj);
        this->outils=new char[strlen(out)+1];
        strcpy(this->outils,out);
        this->plan=new char[strlen(pl)+1];
        strcpy(this->plan,pl);
    }
     
    char* Contenu::getAudience() const
    {
        return this->audience;
    }
    char* Contenu::getObjectif() const
    {
        return this->objectifs;
    }
    char* Contenu::getOutil() const
    {
        return this->outils;
    }
    char* Contenu::getPlan()const
    {
        return this->plan;
    }
    char* Contenu::getPrerequis()const
    {
        return this->prerequis;
    }
     
    void Contenu::affichage()
    {
        cout<< this->audience<<"  "<<this->objectifs<<"  "<<this->outils<<"  "<<this->plan  <<"  "<<this->prerequis<<endl;
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Formation : public ElementCatalogue
    {
        private :
     
                list<Contenu> lContenu;
                list<Contenu>::iterator itContenu;
     
        public :
     
     
                void creerContenu(const char *,const char *,const char *,const char *,const char *)
                inline Formation(){}
                friend ostream &operator<<(ostream &,const Session &);
    };

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Formation::creerContenu(const char * aud ,const char * pre,const char * obj,const char * out,const char * pl )
    {
        Contenu contenu(aud,pre,obj,out,pl);
        lContenu.insert(lContenu.end(),contenu);
     
        for (itContenu = lContenu.begin(); itContenu != lContenu.end() ; itContenu++)
        {
            cout << *itContenu ;
        }
     
    }

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Ta classe "Contenu" a un constructeur pas vraiment trivial (avec des pointeurs, tout �a).


    En utilisant les fonctions de la librairie standard, sans t'en rendre compte, tu r�alises des copies et des assignations.

    Or le compilateur g�n�re un constructeur par copie et un op�rateur par d�faut qui font une copie "stupide" (ils recopient le contenu de ta classe bits � bits).
    Du coup les manipulations de pointeurs �voqu�es plus haut vont mener � n'importe quoi (supprimer du contenu d�j� supprim�, deux copies de classes contenant un pointeur vers la m�me chose...)


    Donc : tu dois �crire toi-m�me le constructeur par copie et l'op�rateur d'assignation de "Contenu" si tu veux �tre s�r de ne pas avoir de probl�mes.





    Note quand m�me que ta classe me semble un peu bizarre : en trimbalant des pointeurs partout dans un C way of life tu te fatigues pour rien, le C++ permet des choses beaucoup plus subtiles qui t'�pargneraient �norm�ment de soucis.
    Sans parler des inlines incongrus qui te feront sans doute pas gagner grand-chose...D'une mani�re g�n�rale, faire une course d'intelligence avec le compilateur n'est pas la premi�re des choses � faire.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Par d�faut
    Merci, je vais donc faire le constructeur par recopie .
    Pour ce qui est des pointeurs , c'est la signature donn�e par la prof, elle nous demande de faire comme ca, pour apprendre � maitriser les char , les adresse ..


    EDIT : Ici,A quel moment le constructeur par recopie par default est appel�?

  4. #4
    jmv
    jmv est d�connect�
    Membre chevronn� Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par d�faut
    Citation Envoy� par Diostrofobe Voir le message
    EDIT : Ici,A quel moment le constructeur par recopie par default est appel�?
    Quand tu ins�res un contenu dans la liste lContenu.

    Citation Envoy� par Diostrofobe Voir le message
    Pour ce qui est des pointeurs , c'est la signature donn�e par la prof,...
    La signature peut-�tre, mais ne peux tu pas utiliser des std::string pour les attributs des classes ? Sinon, il faut effectivement �crire un constructeur de copie.

    Citation Envoy� par ElGat0
    Or le compilateur g�n�re un constructeur par copie et un op�rateur par d�faut qui font une copie "stupide" (ils recopient le contenu de ta classe bits � bits).
    Je dirais plut�t champ � champ.

Discussions similaires

  1. ERROR: pg_atoi: zero-length string
    Par steelspirit92 dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 23/08/2003, 22h29
  2. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    R�ponses: 9
    Dernier message: 13/06/2003, 10h46
  3. [Kylix] Kylix c++ error
    Par pacpac dans le forum EDI
    R�ponses: 2
    Dernier message: 10/06/2003, 16h27
  4. [CR] Print Engine error text
    Par afaraji dans le forum SAP Crystal Reports
    R�ponses: 1
    Dernier message: 03/09/2002, 15h44
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    R�ponses: 2
    Dernier message: 23/03/2002, 11h51

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