begin process at 2012 05 29 07:10:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Initialisation dynamique d'un tableau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Initialisation dynamique d'un tableau

mercredi 1 juin 2005 à 20:24:06 | Initialisation dynamique d'un tableau

tintin72

Bonjour,

Je cherche à initialiser un tableau de caractères (contenu dans une classe) de façon dynamique.
J'ai donc écris le code suivant :


class Coord
{
  public :
     
         char *m_Nom;
         //autres données...         
};


int main(int argc, char *argv[])
{
    char *pConteneur = new char[100];

    cout<<"Entrez votre nom :"<<endl; 
    gets(pConteneur);
   
    longueur = strlen(pConteneur);
   
    Coord personne;
    personne.m_Nom = new char[longueur + 1]; //allocation de mémoire
   
   
    for(int i = 0; i < longueur; i++) //initialisation
    {
      personne.m_Nom[i] = *(pConteneur + i); 
    }  
  
 
    cout<<personne.m_Nom<<endl;
   
    delete [] pConteneur; //désallocation
    delete [] personne.m_Nom;
 
  system("PAUSE"); 
  return 0;
}

Le code fonctionne, toutefois ne l'ayant pas testé dans toutes les contextes possibles je voudrais savoir :

1) si l'allocation et la désallocation de mémoire du membre m_Nom sont correctes ?
2) si l'initialisation de ce membre est correcte ?
3) Est il possible d'utiliser ce code sans risquer un plantage (à cause des nombreux pointeurs) ou d'autres    problèmes plus subtiles.

Merci

Tintin 72

mercredi 1 juin 2005 à 20:29:25 | Re : Initialisation dynamique d'un tableau

poppyto

Membre Club Administrateur CodeS-SourceS
Belle entrée avec un joli risque de buffer overflow.
Et si le prénom dépasse 100 caractères hein ?

Stef
[ Lien ] LE site pour les bassistes
mercredi 1 juin 2005 à 20:38:50 | Re : Initialisation dynamique d'un tableau

tintin72

Oui bien sûr :-) le 100 c'est arbitraire, je pourrai mettre 1000 par ex,
mais je voulais savoir ce qu'il en est pour le reste du code.

"Et si le prénom dépasse 100 caractères hein ?"
Le gars peut faire un procés à ses parents ;-)

nb: de toute façon on est obligé de mettre une valeur arbitraire à un moment donné, on peut pas faire du total dynamique en C/C++, non ?

Tintin 72
mercredi 1 juin 2005 à 20:50:29 | Re : Initialisation dynamique d'un tableau

vecchio56

Administrateur CodeS-SourceS
Le principe c'est que si tu connais la limite (100), l'allocation dynamique ne sert à rien, autant faire char pConteneur[100].
On utilise surtout de l'allocation dynamique quand la taille n'est pas connue à la compilation:
int n;
n=...;
char* pConteneur = new char[n];

Sinon ton code m'a l'air correct
mercredi 1 juin 2005 à 20:51:14 | Re : Initialisation dynamique d'un tableau

poppyto

Membre Club Administrateur CodeS-SourceS
Sisi on doit pouvoir avec un vecteur...

Bon en admettant les 100 caractères, voilà ma correction ^^

1.Version marrante
int main(int argc, char *argv[])
{
    Coord personne;
    personne.m_Nom = new char[100]; 

    cout<<"Entrez votre nom :"<<endl; 
    gets(personne.m_Nom);    
    cout<<personne.m_Nom<<endl;
    
    delete [] personne.m_Nom;
 
  system("PAUSE"); 
  return 0;
}

2.Plus approprié pour ton souci
int main(int argc, char *argv[])
{
    char *pConteneur = new char[100];

    cout<<"Entrez votre nom :"<<endl; 
    gets(pConteneur);
    
    //longueur = strlen(pConteneur);
    //Coord personne;
    //personne.m_Nom = new char[longueur + 1]; //allocation de mémoire
    //for(int i = 0; i < longueur; i++) //initialisation
    //{
    // personne.m_Nom[i] = *(pConteneur + i); 
    ///}  
    //
    //
Tout cette partie au dessu est sans intéret
    // à remplacer par


    personne.m_Nom = new char[strlen(pConteneur)+ 1];
    strcpy(personne.m_Nom,pConteneur);
  
    cout<<personne.m_Nom<<endl;
   
    delete [] pConteneur; //désallocation
    delete [] personne.m_Nom;
 
  system("PAUSE"); 
  return 0;
}



[ Lien ] LE site pour les bassistes

mercredi 1 juin 2005 à 23:15:21 | Re : Initialisation dynamique d'un tableau

tintin72

Effectivement ça va + vite comme ça
Tu dis :.
"Sisi on doit pouvoir avec un vecteur..."
c'est quoi exactement ?

Tintin 72
mercredi 1 juin 2005 à 23:31:48 | Re : Initialisation dynamique d'un tableau

poppyto

Membre Club Administrateur CodeS-SourceS
Tu en sais déjà trop ! Tu verras les vecteurs plus tard, après avoir passé les premières étapes.
Je dis pas ça pour t'embêter mais trop d'infos en même temps, c'est perturbant quand on débute.
Dis toi que le vecteur est un tableau magique où tu peux ranger tout et n'importe quoi, et qu'il s'agrandit au fur et à mesure sans que tu n'ai besoin de manipuler la mémoire.

Stef

[ Lien ] LE site pour les bassistes
jeudi 2 juin 2005 à 08:17:16 | Re : Initialisation dynamique d'un tableau

tintin72

Ok, merci beaucoup

Tintin 72


Cette discussion est classée dans : dynamique, tableau, char, initialisation, pconteneur


Répondre à ce message

Sujets en rapport avec ce message

help ! -> tableau de string 2 dimension dynamique [ par Jiraiya ] voila, pour mon proG tutore de 2 eme annee je cherche a traiter des chaines de caracteres stockées depuis un fichier.txt jusqu'a un tableau de string, Problème pour passer un tableau dynamique à une fonction [ par muguss ] Je n'arrive pas à passer parfaitement mon tableau dynamique de type HANDLE à ma fonction afin que cette dernière ajoute un HANDLE au tableau, donc l'a renvoie d'un tableau en char ds une fonction [ par TheBabyCool ] Comment peut on renvoyer un tableau de char du type :char i[][] dans une fonction ?Merci Déclaration dynamique d'un tableau de chaines de caracteres [ par paulien ] Bonjour à tous !J'essaie de déclarer un tableau de chaines de caractéres dynmiquement, j'ai essayé cette methode, ca ne fonctionne pas, la compilation tableau de chaines de char [ par JaguiJaguar ] Salut, je suis etudiant.je dois réaliser un prog en c qui lit une chaine de char, la stocke dans la premiere ligne d'un tableau char *tab[n]où n est l Tableau dynamique d'objets [ par ph4ntomas ] Bonjour,Voilà le problème...Supposons que mon programme ne soit composé que d'une classe et que ce programme crée un certain nombre d'instances de cet tableau dynamique de structures (niveau debutant) [ par SYL666 ] bonjour,j'ai un petit probleme: j'aimerai definir un tableau dynamique dont la taille n'est connu qu'a l'execution.voila mon code:{ long max; struct Tableau et char to int [ par Niníel ] Bonjour!J'ai un tableau: chTabStart[64] dans lequel je rentre un nombre dans le format suivant: d_25 pour un nombre décimale par exemple. Donc dans mo Tableau suite... [ par Niníel ] Alors voila ma 2ème question de la journée :-PJ'ai un tableau de caractères 64 position: char Tab[64], un compteur: int inCompter et un tableau de 1 p passer un tableau de pointeurs en parametres [ par achirane ] bonjour,je debute en C (dur..) et j'ai un pb qui va surement vous faire ricaner ;-) :je voudrais passer un tableau de pointeurs en parametre a ma fonc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales