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 :

passer un tableau de pointeurs en paramètre


Sujet :

C

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut passer un tableau de pointeurs en paramètre
    salut;

    j'ai un tableau de pointeurs alloué dynamiquement, que je veux passer en paramètre à une fonction, mais la taille je la récupère dans le code, alors je ne sais comment le réceptionner dans la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //mon tableau avec nbrTaille calculé avant et ligne est une chaine de caractère
    char (*tab)[nbrTaille] = malloc(nbrTaille * sizeof(ligne));
     
    //appel de la fonction
    allDiff(tab, nbrTaille);
    merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Montre plus de code: La définition de ligne, celle de nbrTaille...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Attention, ta variable tab est un pointeur de tableau de nbrTaille char, pas un tableau de nbrTaille pointeurs de char.

    char (*tab)[nbrTaille] se lit "soient de type char les nbrTaille éléments de ce que désigne tab".
    sans les parenthèses, eut égard aux priorités, char *tab[nbrTaille] se lit "soient de type char ce que désignent les nbrTaille éléments de tab".
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    merci, j'ai pu résoudre le problème avec cette déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void allDiff(char** T, int nbrTaille){}
     
    char** tab;
       tab = malloc(nbrTaille * sizeof(tab)); 
        for(i = 0; i < nbrTaille; i++){
            tab[i] = malloc(MAX); 
       }
    allDiff(tab, nbrTaille);

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    attention à bien documenter, parce qu'un pointeur de pointeur, c'est ambigü dans son intention.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    merci, j'ai pu résoudre le problème avec cette déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void allDiff(char** T, int nbrTaille){}
     
    char** tab;
       tab = malloc(nbrTaille * sizeof(tab)); 
        for(i = 0; i < nbrTaille; i++){
            tab[i] = malloc(MAX); 
       }
    allDiff(tab, nbrTaille);
    La question serait pourquoi allouer avec malloc si après chaque ligne a MAX comme allocation. Pourquoi ne pas allouer exactement ce dont tu as besoin?

    + Vérifie le retour de malloc à chaque fois ;-)

  7. #7
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    Fearyourself, effectivement j'ai laissé pour l'instant l'allocation avec max jusqu'á ce que je developpe la fonction qui reçoit le tableau pour que je sache quel est le plus idéal, mon code n'est pas encore fini
    Merci

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    mais la taille je la récupère dans le code, alors je ne sais comment le réceptionner dans la fonction...
    merci, j'ai pu résoudre le problème avec cette déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void allDiff(char** T, int nbrTaille){}
    Bonjour

    Quand on fait de l'allocation dynamique, c'est pas forcément inutile (antiphrase et euphémisme) de définir une structure contenant
    • la chose allouée
    • la taille de la chose allouée


    Ainsi, toute fonction recevant cette structure en paramètre connaitra automatiquement toutes ces infos...

    Citation Envoyé par fearyourself Voir le message
    + Vérifie le retour de malloc à chaque fois ;-)
    + définir une procédure à appeler en cas d'echec de malloc à l'itération "x" et permettant de libérer alors les "x-1" allocations réussies avant de libérer le tableau initial...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [pthread] passer un tableau de structures en paramètre
    Par guidono dans le forum Débuter
    Réponses: 5
    Dernier message: 05/03/2011, 22h55
  2. Réponses: 8
    Dernier message: 17/09/2008, 13h11
  3. Réponses: 4
    Dernier message: 18/02/2007, 21h03
  4. [D7] passer un tableau dynamique en paramétre ?
    Par PhD13 dans le forum Langage
    Réponses: 6
    Dernier message: 11/01/2006, 19h09
  5. Comment passer un tableau dynamique en paramètre ?
    Par Charette dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2005, 12h28

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