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 :

[C ANSI] Problème avec le paramètre d'une fonction


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut [C ANSI] Problème avec le paramètre d'une fonction
    Voici mon code :

    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
    17
    18
    19
    int main(void)
    {
    	int vecteur[] = {1,2,3};
    	int longueur = 3;
    	int capacite = 5;
    	int element;
    
    	/* Test de v_ajouter */
    	element = 4;
    	v_ajouter(&vecteur,&longueur,&capacite,element);
    }
    
    void v_ajouter(int **pvect,int *plg,int *pcapa,int elem)
    {
    	if(*plg > *pcapa)
    		*pvect = realloc(*pvect,*plg);
    
    	*(*pvect+(*plg)++) = elem;
    }
    Le compilateur me donne cet avertissement :
    warning: passing argument 1 of ‘v_ajouter’ from incompatible pointer type

    Mais je ne comprend pas ce que je pourrais mettre d'autre que l'adresse de mon tableau, quelqu'un peut-il m'expliquer ? Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par F0ul Voir le message
    Le compilateur me donne cet avertissement :
    warning: passing argument 1 of ‘v_ajouter’ from incompatible pointer type
    Euh...
    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
    17
    18
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:10: warning: implicit declaration of function `v_ajouter'
    main.c:11: warning: control reaches end of non-void function
    main.c: At top level:
    main.c:14: error: conflicting types for 'v_ajouter'
    main.c:10: error: previous implicit declaration of 'v_ajouter' was here
    main.c: In function `v_ajouter':
    main.c:16: warning: implicit declaration of function `realloc'
    main.c:16: warning: assignment makes pointer from integer without a cast
    Process terminated with status 1 (0 minutes, 0 seconds)
    2 errors, 4 warnings
    Mais je ne comprend pas ce que je pourrais mettre d'autre que l'adresse de mon tableau, quelqu'un peut-il m'expliquer ? Merci d'avance
    http://emmanuel-delahaye.developpez.....htm#param_tab

    Mais en observant ton code, je constate que ce que tu veux, c'est gérer dynamiquement la taille du tableau.

    On ne peut agrandir un tableau avec realloc() que si il a été préalablement alloué avec malloc().

    Pour ça, on besoin de 2 informations :

    - l'adresse du premier élément du tableau de type T*
    - la taille du tableau en nombre d'éléments, de type size_t.

    Une structure est la bienvenue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct tab_dyn
    {
       int *vecteur;
       size_t longueur;
    };
    Je te laisse développer sur cette base... Il faut sans doute développer quelques fonctions 'intelligentes' autour de cet 'objet'...

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    En fait le problème venait simplement du fait que je déclarais un tableau et non un pointeur. J'avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int vecteur[] = {1,2,3};
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *vecteur = malloc(longueur*sizeof(int)); *vecteur = ...
    Sinon pour les erreurs que tu avais c'est simplement que j'avais enlevé les #include et le return 0; parce que mon code était plus long que ça, j'avais fait que des petits copier/coller.

    Et c'est dans le cadre d'un exercice sans l'utilisation de structures

    Merci

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Tu as résolu ton problème, mais je reviens pour information sur la cause de l'avertissement du compilateur.
    Mais je ne comprend pas ce que je pourrais mettre d'autre que l'adresse de mon tableau,
    Alors le type du paramètre doit être "adresse d'un tableau" qui n'est pas int**
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void v_ajouter(int (*pvect)[] ,int *plg,int *pcapa,int elem)
    (Même avec cette correction, tu aurais eu des problèmes plus loin :
    *pvect =... est alors illégal : *pvect est un tableau et on ne peut jamais écrire tableau = qq chose.)

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    D'accord merci pour ces précisions, ça ne fait jamais de mal d'en savoir un peu plus

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

Discussions similaires

  1. Problème avec un paramètre d'une procédure
    Par Lucas Panny dans le forum Langage
    Réponses: 1
    Dernier message: 03/10/2009, 15h58
  2. problème avec l'exécution d'une fonction
    Par b_reda31 dans le forum Images
    Réponses: 2
    Dernier message: 31/05/2008, 13h50
  3. problème avec l'utilisation d'une fonction
    Par mcspawn dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2007, 15h39
  4. problème avec l'appel d'une fonction
    Par mademoizel dans le forum ASP
    Réponses: 5
    Dernier message: 26/06/2006, 15h04
  5. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 15h38

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