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 :

allouer un tableau de message


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut allouer un tableau de message
    Bonjour,

    Je voudrais créer dynamiquement un tableau de 500 mots, chaque mot ayant une taille de 100 char.
    En gros c'est un tableau à deux dimension (donc char**).
    Ce que je faisai c'était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char **monTableau = NULL;
     
    *monTableau = (char *) calloc(500, sizeof(char));
    for(int i = 0; i < 100; i++)
    monTableau[i] = (char *) calloc(100, sizeof(char));
    Est ce correct?

    Ensuite je veux ecrire des mots dans ce tableau donc je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char monMots[100] = "hello world!";
    for(int i = 0; i < 500; i++)
    memcpy( &monTableau[i] , monMots, 100 * sizeof(char));
    Etes vous d'accord?

    Je vous remercie

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Par défaut
    D'après mes souvenirs de c, je ferais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char **monTableau = NULL;
     
    monTableau = (char *) calloc(500, sizeof(char *));
    for(int i = 0; i < 100; i++)
    monTableau[i] = (char *) calloc(100, sizeof(char *));
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    monTableau[0][0] = 'H';
    monTableau[0][1] = 'E';
    monTableau[0][2] = 'L';
    monTableau[0][3] = 'L';
    monTableau[0][4] = 'O';
    monTableau[0][5] = ' ';
    monTableau[0][6] = 'W';
    monTableau[0][7] = 'O';
    monTableau[0][7] = 'R';
    monTableau[0][7] = 'L';
    monTableau[0][7] = 'D';

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut
    Citation Envoyé par herrs Voir le message
    D'après mes souvenirs de c, je ferais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char **monTableau = NULL;
     
    monTableau = (char *) calloc(500, sizeof(char *));
    for(int i = 0; i < 100; i++)
    monTableau[i] = (char *) calloc(100, sizeof(char *));
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    monTableau[0][0] = 'H';
    monTableau[0][1] = 'E';
    monTableau[0][2] = 'L';
    monTableau[0][3] = 'L';
    monTableau[0][4] = 'O';
    monTableau[0][5] = ' ';
    monTableau[0][6] = 'W';
    monTableau[0][7] = 'O';
    monTableau[0][7] = 'R';
    monTableau[0][7] = 'L';
    monTableau[0][7] = 'D';
    Merci, c'est ça que je veut faire.

    Je voulais vérifier car j'ai une exeption lorsque je libère ma zone mémoire allouée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int i = 0; i < 100; i++)
       free(monTableau[i]);
     
    free(monTableau);
    pour moi c'est correct mais apparemment mon PC n'aime pas

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut
    C'est bon, j'ai trouvé.
    Petite erreur dans mon "free".

    Merci.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    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
    	char **monTableau = NULL;
    	int i;
     
    /* Allocation mémoire */
    	monTableau = calloc(500, sizeof *monTableau);
    	for(i = 0; i < 500; i++)
    		monTableau[i] = calloc(100, sizeof **monTableau);
     
    /* ... programme ... */
     
    /* ... */
     
    /* Libération mémoire */
    	for(i = 0; i < 500; i++)
    		free (monTableau[i]);
    	free(monTableau);

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

Discussions similaires

  1. Allouer un tableau d'Int32
    Par JeanNoel53 dans le forum Visual C++
    Réponses: 7
    Dernier message: 06/08/2014, 17h14
  2. allouer un tableau 2 dimensions avec shmget.
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 12/06/2006, 11h11
  3. FAQ: Comment allouer un tableau dynamique
    Par beb30 dans le forum C
    Réponses: 14
    Dernier message: 02/05/2006, 16h13
  4. Réponses: 8
    Dernier message: 25/04/2006, 16h08
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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