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 :

Tableau dynamique d'objets


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2015
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Par d�faut Tableau dynamique d'objets
    Bonjour,
    Je voudrais savoir comment fait-on pour allouer et d�sallouer un tableau d'objet dynamique dans lesquels il y a un autre tableau d'objet dynamique aussi, sans utiliser la STL.

    J'ai fais �a comme d�claration de classe:
    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
    class a {
     blablabla;
     
    public:
     a();
     ~a();
    }
     
    class b {
     a **tab;
     blabla;
     
    public:
     b();
     ~b();
    }
     
    class c {
     b **tab2;
     blabla;
     
    public:
     c();
     ~c()
    }
    Merci

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par d�faut
    Salut,

    euh operator new et operator new[] et leurs pendants pour la lib�ration operator delete et operator delete[] ?
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2015
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Par d�faut
    Haha oui je sais Mais ce que je voulais dire c'est que j'ai fais un programme mais j'ai des erreurs segmentations partout du coup, je me tourne vers vous pour savoir comment faire:
    Par exemple pour reallouer tab2; j'ai fais:
    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
     
     b** tab_aux = new b*[taille+1];
     for (int i=0; i<taille; i++)
     {
    	tab_aux[i]=tab2[i];
     }
     
    	 tab2= new b*[10];		        
     for (int i=0; i<taille; i++)		
    	 {					
    		tab2[i]=new Espace();		
    	 }					
    	 for (int i=0; i<taille; i++)		
    	 {					
    		delete tab2[i];			
    	 }					
    	 delete[] tab2;				
     
    	 for (int i=0; i<taille; i++)		
     	 {					
    		tab2[i]=tab_aux[i];		
     	 }					
     
    	 tab2[taille]= new b ();
    Pour d�salouer tab2:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
     for (int i=0; i<taille; i++) 
     {
    	delete tab2[i];
     }
    Sauf qu'apr�s quand j'essaye de manipuler tab, j'ai des erreurs segmentations de partout..

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Salut,
    Et tu utilises ces op�rateurs dans les constructeurs et destructeurs de ta classe pour la table et dans le cas de tableau de pointeurs, le contenant assure la cr�ation et la destruction des �l�ments

    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 b {
     a **tab; // tableau de pointeurs (b alloue le tableau et initialise ou alloue les pointeurs)
     blabla;
     
    public:
     b()   { tab = new (a*)[10]; for ( int i=0; i <10; ++i ) tab[i] = new a; }
     ~b()  { detruireElements(); }
     void detruireElements()  { if ( tab ) for ( int i=0; i <10; ++i ) delete tab[i];  delete[] tab; }
       // et ici il devient impératif de définir ou interdire au moins les copies
       b( const b& x ) = delete; // création par copie interdite par exemple
       b& operator=( const b& x ) {
         if ( &x != this ) {          // l'opérateur de copie, peut par exemple
            // détruire les éléments de *this
            // allouer this->tab et les éléments de this->tab[]
            // copier les éléments de x.tab[] dans this->tab[]
         } 
         return *this;
       }
    // et on peut aussi facultativement optimiser les opérations de transfert
       b( b&& x ) : tab(x.tab) { x.tab=0; }
       b& operator=( b&& x ) {
          detruireElements();
          tab = x.tab;
          x.tab = 0;
          return *this;
       }
    };

  5. #5
    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
    La cl� de la s�curit�, en C++, c'est RAII.
    Ce principe consiste � encapsuler une ressource dans une classe, de fa�on � l'acqu�rir dans le constructeur et la lib�rer dans le destructeur.
    Cela permet de garantir que cette ressource est lib�r�e une et une seule fois.

    C'est pr�cis�ment ce que font std::vector (sur un tableau dynamique), std::fstream (sur un FILE*), std::unique_ptr (sur un pointeur obtenu via new), etc.

    Et dalfab, ton d�truire_�l�ments est faux, puisqu'il teste le pointeur, mais ne le mets pas � nullptr.

  6. #6
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Citation Envoy� par leternel Voir le message
    Et dalfab, ton d�truire_�l�ments est faux, puisqu'il teste le pointeur, mais ne le mets pas � nullptr.
    Oui, en effet, un pointeur lib�r� doit �tre imp�rativement remis � z�ro. Ainsi dans mon exemple une exception entre les lignes 22 et 23 provoquerait un beau g�chis.

  7. #7
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    J'ai l'impression que tu ne respecte pas la r�gle des 3 ou des 5 : https://rmf.io/cxx11/rule-of-zero/

    �a peut expliquer tes soucis...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

Discussions similaires

  1. [C#] Tableau dynamique d'objets
    Par Virtuelfred dans le forum C#
    R�ponses: 2
    Dernier message: 17/12/2009, 17h52
  2. Probl�me de tableau dynamique d'objets
    Par markfish55 dans le forum C++
    R�ponses: 2
    Dernier message: 07/06/2008, 13h07
  3. Transmission de tableau dynamique d'objets
    Par laulaurent dans le forum C++
    R�ponses: 7
    Dernier message: 17/11/2007, 22h59
  4. R�ponses: 11
    Dernier message: 26/09/2007, 21h24
  5. tableau dynamique d'objets
    Par logarithme1984 dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 15/03/2007, 13h51

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