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 :

Redefinition Taille Tableau 2D


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Points : 38
    Points
    38
    Par défaut Redefinition Taille Tableau 2D
    Bonjour à tous,
    j'ai un probleme. Comment redefinir la taille d'un tableau à deux dimmension en fonction d'une variable?

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char contenu_fichier[1][255] = {0};
    je voudrais augmenter la taille de la 1ere dimension en fonction d'une variable .

    merci

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,

    impossible, (a part peut etre e C99), si tu veux un tableau a taille dynamique, il faut faire de l'allocation : dynamique (malloc et realloc).
    "vaste programme"

  3. #3
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Bonjour,

    Normalement, la re-allocation de la mémoire s'effectue sur une zone déja alloué dynamiquement et non statiquement....

    Donc, si tu veux re-allouer une nouvelle zone pour le même tableau que tu a définie comme statique: c'est pas possible !!!

    donc, il faut definir un pointeur en statique , et changer seuelemnt ça valeur pour qu'elle pointe sur la zone utilisé ....

    RQ: un tableau alloué dynamiquement de 2D c'est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Exemple d'un tableau T[100][100];
    char **pTableau;
    (pTableau) = malloc(100);
    pTableau[0] = malloc(100);
    ...
    pTableau[99] = malloc(100);
    "La créativité est faites d'attention et de respect pour les petits faits de la vie."

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Points : 294
    Points
    294
    Par défaut
    Déclare ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char **contenu_fichier ;
    Apres tu peux allouer la mémoire de ton tableau avec malloc et la réallouer avec realloc

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    ok dc si je fais quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char **contenu_fichier;
    contenu_fichier = malloc (nbligne);
     
    for(i=0;i<=nbligne;i++)
    contenu_fichier[i] = malloc(128);
    ca devrait marcher

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641

  7. #7
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    ca devrais presque marcher

    ca ca doit etre un poil mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define TAILLE_LIGNE        128
     
    char **contenu_fichier;
    contenu_fichier = malloc (nbligne * sizeof( *contenu_fichier ) ); 
    /* idealement tester le retour de l allocation pour etre sur qu'elle a bien marchée */
     
    for(i=0;i<=nbligne;i++)
    contenu_fichier[i] = malloc(TAILLE_LIGNE * sizeof( **contenu_fichier ) );
    /*pareil tester chaque retour */
    "vaste programme"

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    J'ai essayer en le code que tu m'as donne, mais...en realiter il n'y a pas un vrai tableau..puisque lorsque je lance le programme en mode debug, je ne vois pas un tableau ac N ligne et M colonne. mais cela fonctionne t il quand meme comme un tableau?es ce que si je le rempli avec une boucle for , je peut le faire comme avec un tableau normale?

    en tous cas merci à tous d'avoir repondu si vite

  9. #9
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Oui, ca fonctionne a peut pres comme un tableau pour les acces a index, non dans le sens ou les données ne sont pas contigues, mais c'est pas importants.

    Par contre il peux etre interessant de conserver la tailles de tes tableaux pour pouvoir les parcourir (surtout trouver leur fin et eviter d aller ecrire apres sur de la memoire qui appartient a d autres variables).

    Par contre tout ce qui est alloué avec malloc doit etre desallouer avec free une fois que t en a plus besoin (grosso modo tu reprends la boucle de création et tu remplaces les malloc par des free)
    "vaste programme"

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    ok merci

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 149
    Points
    149
    Par défaut
    Attention aux free !!

    C'est comme ça qu'il y a des fuites mémoires

    Un outil très pratiques pour vérifier :
    valgrind

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

Discussions similaires

  1. Taille tableau par utilisateur
    Par nicodn02 dans le forum C
    Réponses: 56
    Dernier message: 26/04/2007, 18h28
  2. Aligner taille tableau sur celui du dessous
    Par linar009 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/09/2006, 17h02
  3. besoin d'aide probleme taille tableau
    Par zhao dans le forum C++
    Réponses: 8
    Dernier message: 28/09/2006, 10h14
  4. [Tableaux] taille tableau a deux dimensions
    Par nath-0-0 dans le forum Langage
    Réponses: 2
    Dernier message: 24/08/2006, 19h04
  5. [Tableaux] trouver taille tableau html en php
    Par eulalie15 dans le forum Langage
    Réponses: 4
    Dernier message: 03/07/2006, 14h47

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