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 :

Déclaration dynamique d'un tableau dans une procédure


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut Déclaration dynamique d'un tableau dans une procédure
    Bonsoir !!

    Voici mon souhait le plus cher : pouvoir déclarer un tableau dynamique dans une fonction, et pouvoir le réutiliser dans mon main.

    Evidemment l'utilisateur pourra choisir la hauteur et la largeur de son tableau, mais pour l'instant j'ai défini la largeur et la hauteur arbitrairement.

    J'ai donc fait ma petite procédure :
    Puis, son appel dans le main et un essai de remplissage + affichage :

    Problème : ça compile, mais j'ai une belle erreur windows. J'en conclue donc qu'il y a eu un problème au niveau de l'allocation... mais je sèche

  2. #2
    Membre régulier Avatar de nabodix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 93
    Points : 115
    Points
    115
    Par défaut
    Bonjour

    Je m'y connais absolument pas en C (mon truc c'est le java..).
    Mais j'ai p-e une idée..
    Jdirais qu'il manque une * quand tu utilises "tab" dans ta fonction allocdyntab...

    Il ne faudra alors pas oublier de mettre des parenthèses qd tu utiliseras les crochets(==>(*tab)[i]).

    Voila, ca marche ainsi chez moi, mais c'est p-e pas ca..

    bonne chance

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Ca marche, magnifique !!!

    Par contre, tu pourrais m'expliquer le pourquoi de rajouter une étoile ?

    EDIT : nan c'est bon, c'était ce que j'avais fait au début, mais je n'avais pas mis les fameuses parenthèses !!! C'est pour ça que j'avais enlevé ces étoiles

  4. #4
    Membre régulier Avatar de nabodix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 93
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par lowwa132 Voir le message
    nan c'est bon, c'était ce que j'avais fait au début, mais je n'avais pas mis les fameuses parenthèses !!!
    moi aussi c'est ce qui m'a posé problème.. et j'ai essayé de faire pour n'utiliser que tab2 (trop d'étoiles ca me perturbe ), et ca a marché ainsi (et donc compris d'où venait le problème)..
    Jdébute aussi en C, et grâce à toi j'ai (plus ou moins) fait mon premier tableau dynamique à 2D
    merci, ce fut très instructif

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Mais de rien.

    Je tiens quand même à dire que faire de l'alloc dynamique dans une fonction (ou plutôt ici procédure) c'est s'embêter pour un rien

    Mais là j'en avais besoin car le sujet me le demande hihihi

    Je retire mon code, risque de plagia

  6. #6
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par lowwa132
    Je retire mon code, risque de plagia
    C'était faux de toute façon .

    L'égoïsme n'a pas sa place ici ceci est un forum d'entraide !!
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Faux ? Es-tu sûr ? Tu l'as vu au moins ? C'est juste parce que j'ai dit qu'il ne marchait pas, et les réponses apportées permettaient de le corriger aisément.

    Et puis, j'avais l'intention de reposter mon code une fois la date du rendu dépassée.

    J'ai pas envie de voir mon bout de code dans la moitié des sujets de la promo !!

  8. #8
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    ce code la marche est (peut etre ) juste
    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
    void allocdyntab(char ***tab)
    {
        int i;
        int hauteur, largeur;
     
        hauteur=6;
        largeur=6;
     
        *tab=(char**)malloc(hauteur*sizeof(char**));
     
        for(i=0; i<hauteur; i++)
        {
            (*tab)[i]=(char*)malloc(largeur*sizeof(char*));
        }
    }

  9. #9
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Le net regorge d'exemple d'allocation dynamique ( just google it! ), il n'y a pas non plus 36 mille manières de faire, enfin bref il manquait la libération de mémoire dans ton code
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  10. #10
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par elmcherqui Voir le message
    ce code la marche est (peut etre ) juste
    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
    void allocdyntab(char ***tab)
    {
        int i;
        int hauteur, largeur;
     
        hauteur=6;
        largeur=6;
     
        *tab=(char**)malloc(hauteur*sizeof(char**));
     
        for(i=0; i<hauteur; i++)
        {
            (*tab)[i]=(char*)malloc(largeur*sizeof(char*));
        }
    }
    Non il y a des étoiles en plus et il est aussi inutile de caster le retour de malloc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    *tab=malloc(hauteur*sizeof(char*));
    <...>
    (*tab)[i]=malloc(largeur);
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    Le net regorge d'exemple d'allocation dynamique ( just google it! ), il n'y a pas non plus 36 mille manières de faire, enfin bref il manquait la libération de mémoire dans ton code
    Le tableau en question j'en ai besoin dans tout le main, la libération ne se ferait donc qu'à la fin.
    Or, quand on quitte le main, la mémoire est libérée de toute façon, non ?

  12. #12
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Quand un processus se termine généralement toutes les ressources qui lui sont associées sont libérées par le système d'exploitation ( fichiers, mémoire ... ), en tous les cas je préfère avoir la conscience tranquille et faire correspondre un free à chaque malloc.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    OK je vais le rajouter merci du conseil

Discussions similaires

  1. [VBA] Récupération d'un tableau dans une procédure
    Par lucasflorent dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/02/2012, 20h09
  2. Passage d'un tableau dans une procédure
    Par Matmal11 dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 12/10/2009, 17h04
  3. Réponses: 11
    Dernier message: 18/08/2008, 16h38
  4. Réponses: 4
    Dernier message: 01/01/2007, 10h26
  5. Passer en paramétre un tableau dans une procédure stockée
    Par killysui dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/04/2006, 11h47

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