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 tableaux


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut Allocation dynamique d'un tableau de tableaux
    Bonjour,

    Tout d'abord merci à ceux qui prendront le temps de me lire,

    Je ne sais pas si j'ai choisi le bon titre, mais voila mon problème :

    Je dois stocker dans mon programme m tableaux de taille p*k sachant que m, p et k sont obtenus grâce à un fscanf() et ne sont donc pas connus au moment de la compilation...

    De plus, m est fixe mais p et k varie pour chaque valeur de m...

    J'ai eu pour première intuition de créer une structure contenant le tableau de taille p*k et de faire un calloc(n, sizeof(ma_structure))) le soucis est, je pense que p et k n'étant pas connus au moment de la compilation, cette allocation n'est pas possible...

    Je pense pouvoir m'en sortir en isolant les valeurs maximales de p et k et créer un tableau de taille m*pmax*kmax mais ce n'est pas très "propre" et cela m'obligerait à parcourir plusieurs fois mon fichier, et me poserait peut être problème par la suite compte tenu des "blancs" que contiendra ce tableau.

    Comme je maitrise assez peu le c (ou du moins je visualise assez mal ce qui se passe en mémoire en fonction de ce que j'envoie à mon compilateur) je suis un peu perdu pour me sortir de ça...

    J'espère que j'ai été assez clair dans ma question

    Bonne journée,

    Adrien.

  2. #2
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    En fait, si j'ai bien compris, ce que tu veux faire c'est un tableau de tableau dont les dimensions ne sont pas connus à la compilation.
    Pour cela tu as deux solutions:
    -soit tu fais un tableau de pointeurs dans lequel chaque pointeur pointera vers un tableau de la 2e dimension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int** tab=malloc(n*sizeof(int*));
     
    for(k=0;k<n;k++)
    {
        tab[k]=malloc(p*k*sizeof(int));
    }
    pour aller à la case j du i ème tableau tu feras:
    -Ou alors tu ne réserve qu'un seul grand tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int* tab=malloc(n*p*k*sizeof(int));
    Mais tu devras alors faire pour accéder à la case j du i ème tableau:

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse rapide,

    cependant si j'ai bien compris, tes deux méthodes sous entendent de connaître à l'avance les valeurs de p, k et m or je les obtiens en lisant un fichier et cela sous entendrait de parcourir deux fois le fichier (et son format implique pas mal de boucles...)

    En fait je cherche s'il est possible de faire quelque chose du genre
    *Un tableau contenant les adresses de m tableaux
    *m tableaux de taille variable

    Edit : en fait le soucis est plus dans le fait que pour chaque valeur de m, p et k peuvent être différents.

  4. #4
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Je ne comprends pas ce que tu veux dire par "être connu à l'avance"

    Pour répondre à ta deuxième question, oui il est possible de faire un tableau contenant des pointeurs vers des tableaux qui n'ont pas tous la même dimension. Pour cela tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int** tab=malloc(n*sizeof(int*));
     
    tab[0]=malloc(2*sizeof(int));
    tab[1]=malloc(7*sizeof(int));
    Tu auras alors un pointeur vers un tableau de 2 cases dans la case 0 du tableau de pointeurs, vers un tableau de 7 cases dans la case 1.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    ça correspond exactement à ce que je cherche (désolé si je n'ai pas été très précis dans ma question),

    et donc si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int **tab=malloc(2*sizeof(int*));
     
    tab[0]=malloc(x1*y1*sizeof(int));
    tab[1]=malloc(x2*y2*sizeof(int));
    j'aurais bien un tableau qui contient des pointeurs vers deux tableaux à deux dimensions de taille respective x1 par y1 et x2 par y2 ? ou à des tableaux à une dimension de taille x1y1 et x2y2 ?

  6. #6
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Ce sont deux tableaux à une dimension de taille x1*y1 et x2*y2
    Cependant il faut bien comprendre que tu implémenter un tableau à deux dimension à partir de cela.
    En effet, si tu vois ton tableau comme un tableau de deux dimensions comme x1 colonnes par exemple, la position d'un élément(i,j) (avec i numero de colonne et j numero de ligne) est donné par:

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    ok donc tout simplement au lieu d'avoir x1 colonnes de y1 éléments on a une ligne de x1*y1 éléments et il y a juste à en tenir compte lorsque l'on veut extraire des éléments de ce tableau !

    Merci beaucoup de tes réponses je crois que je vais m'en sortir !

  8. #8
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Bonne chance !

Discussions similaires

  1. [debutant] allocation dynamique d'un tableau.
    Par méphistopheles dans le forum Débuter
    Réponses: 3
    Dernier message: 16/03/2007, 12h45
  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