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 :

Allocation dynamique d'un tableau de pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Allocation dynamique d'un tableau de pointeur
    Bonjour,

    je suis débutant en C++ et je bloque sur un point basique. Comment faire pour créer un tableau de pointeur où la taille de celui n'est pas précisé ?
    J'ai fait cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *monTab[10] = {NULL} ;
    monTab[10] = new char ;
    mais j'aimerais vraiment le rendre dynamique, or ici je suis limité à 10 entrées.

    Merci

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonsoir,

    Utilise std::vector !
    Les tableaux dynamiques, c'est du C, voire du vieux C++.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Normalement, tu ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char **tab=new char*[n];
    for(int i=0;i<n;i++)  tab[i]=new char[p];
    Mais comme le disait Florian, il vaut mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<char*> tab(n);
    for(int i=0;i<n;i++)  tab[i]=new char[p];
    ou encore mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector<string> tab(n);
    Comme ca tu n'as plus besoin d'allouer ou de désallouer...

    Francois

  4. #4
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Merci pour vos conseils. En faite, je ne souhaite pas utiliser la STL donc je vais opter pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char **tab=new char*[n];
    for(int i=0;i<n;i++)  tab[i]=new char[p];
    mais n et p sont des constantes que je dois initialisé ou pas ? J'avais déclaré comme cecimais j'obtiens toujours n=0 et p=3910792, c'est normal ?

    Merci

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    En faite, je ne souhaite pas utiliser la STL
    Raisons ?

    mais n et p sont des constantes que je dois initialisé ou pas ?
    Oui, sinon les valeurs sont indéterminées.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Merci pour vos conseils. En faite, je ne souhaite pas utiliser la STL donc je vais opter pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char **tab=new char*[n];
    for(int i=0;i<n;i++)  tab[i]=new char[p];
    Si ton tableau est alloué et désalloué d'un coup, une astuce à connaitre est d'allouer toutes les lignes en un seul bloc (tab[0]) et de placer les tab[i] derrière à la bonne distance...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char **tab=new char*[n];
    tab[0]=new char[n*p];
    for(int i=1;i<n;i++) tab[i]=tab[i-1]+n;
    Ca gagne un peu de temps, et ca permet des opérations "malignes" sur les lignes du tableau (par exemple le parcours de tout le tableau en une boucle unique)

    Citation Envoyé par Général03 Voir le message
    mais n et p sont des constantes que je dois initialisé ou pas ? J'avais déclaré comme cecimais j'obtiens toujours n=0 et p=3910792, c'est normal ?
    Il n'y a pas de raison que ces valeurs soient toujours les mêmes... Ca va dépendre de ton environnement (et si par malheur n ou p est négatif...). Quoi qu'il en soit, tu ne peux allouer un tableau donc tu ne connais pas la taille...

    Francois

  7. #7
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Quoi qu'il en soit, tu ne peux allouer un tableau donc tu ne connais pas la taille...
    ben....en faite....c'est se que je cherche à faire !!! Il y a surement un moyen d'augmenter la taille de mon tableau si toutefois il est trop court à un certain endroit de mon programme ?

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

Discussions similaires

  1. allocation dynamique d'un tableau de pointeurs
    Par Dilettante dans le forum C++
    Réponses: 9
    Dernier message: 29/06/2007, 23h41
  2. Réponses: 2
    Dernier message: 05/03/2007, 18h37
  3. Réponses: 67
    Dernier message: 13/02/2007, 18h08
  4. Réponses: 13
    Dernier message: 01/10/2006, 00h25
  5. [PRO*C] Allocation dynamique d'un tableau de VARCHAR
    Par NéalZheimer dans le forum Interfaces de programmation
    Réponses: 5
    Dernier message: 07/07/2006, 13h02

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