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 :

teablaeu 2D + pointeur


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut teablaeu 2D + pointeur
    Bonjour,
    Comment peut-on initialiser un tableau à deux dimensions en utilisant la fonction new?
    Et comment peut-on recopier un tableau de chaine de caractères de dimension 1 vers une ligne d'un tableau de chaine de caractères de dimension 2?

    Merci en avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Typiquement, pour allouer, j'utiliserais une version C++ de ceci:
    Code C++ : 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
    #include <stdexcept>
     
    template< class T >
    T** Alloc2D(
     size_t taille1, /*[in] Nb de lignes */
     size_t taille2  /*[in] Nb de valeurs par ligne */
     )
    {
    	size_t const taille1x2 = taille1*taille2;
    	if(taille1x2 / taille2 != taille1)
    		throw std::overflow_error("Size multiplication overflow"); //Débordement des tailles
     
    	//Alloue tableau de pointeurs (première dimension)
    	T** ppValeurs = new T*[taille1];
     
    	try
    	{
    		//Alloue tableau des données
    		T* pValeurs = new T[taille1x2];
     
    		//Fait pointer les pointeurs aux différents endroits des données
    		for(size_t i=0 ; i<taille1 ; ++i)
    			ppValeurs[i] = pValeurs + (i*taille2);
    	}
    	catch(std::bad_alloc const &)
    	{
    		//La seconde allocation a échoué: On nettoie la première.
    		delete[] ppValeurs;
    		throw;
    	}
    }
     
    template< class T >
    Free2D(T** ppValeurs)
    {
    	if(ppValeurs != NULL)
    	{
    		delete[] ppValeurs[0]; //Supprime le tableau des données
    		delete[] ppValeurs; //Supprime le tableau de pointeurs
    	}
    }

    C'est dans des moments comme ça que j'aime les exceptions: Le code est beaucoup plus simple que dans la version C!
    Edit: Sauf que j'avais oublié le cas où la seconde allocation échouait.

Discussions similaires

  1. pointeurs
    Par ghost74 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2002, 02h52
  2. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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