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 :

Fonction qui renvoie un tableau dynamique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut Fonction qui renvoie un tableau dynamique
    Bonjour,
    J'ai réalisé une petite fonction qui permet de remplir un tableau avec des chiffres
    le tout fonctionne sans problème, mais j'ai messages d'alerte que je n'arrive pas à enlever lorsque je compile mon programme avec gcc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    test.c: In function ‘main’:
    test.c:22:17: attention : assignment makes pointer from integer without a cast [enabled by default]
    test.c: In function ‘Function’:
    test.c:50:3: attention : return makes integer from pointer without a cast [enabled by default]
    et mon programme test.c
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
     
    /*  Prototype  */
    int Function(int taille, int *tableau);
     
    /*  Main  */
    int main() 
    {
      int *tableau_final;
      int nombre_case = 20;
      int i;
     
      /* Allocation */
      if( (tableau_final = calloc (nombre_case,sizeof(int))) == NULL)
        {
          perror("Echec");
          exit(0);
        } 
     
      tableau_final = Function(nombre_case,tableau_final); // fonction
     
      for(i=0;i<nombre_case;i++)
        {
          printf("%d\n",tableau_final[i]);
        }
     
    }
     
     
    /*  Function  */
    int Function(int la_taille, int *tab_a_envoyer)
    {  
     
      int i;
      /* Allocation */
      if( (tab_a_envoyer = (int*) calloc (la_taille,sizeof(int))) == NULL)
        {
          perror("Echec");
          exit(0);
        } 
     
      tab_a_envoyer[0] = 0;
      for(i=1;i<la_taille;i++)
        {
          tab_a_envoyer[i]=tab_a_envoyer[i-1]+1;
        }
     
      return(tab_a_envoyer);
    }
    Mon programme ne marche plus lorsque j'essaie de suivre ces messages.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Une remarque après une lecture rapide :
    "Function" est sensée renvoyer un int mais renvoie un int*

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    je m'en sors toujours pas

  4. #4
    Expert confirmé
    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
    Par défaut
    1- La première chose que fait Function() est d'écraser (par le calloc()) la valeur passée dans tab_a_envoyer. Clairement, cela implique que tab_a_envoyer n'a pas à être un paramètre de la fonction, mais une variable locale.

    2- Function() renvoie tab_a_envoyer qui est un int *. Ce doit donc être le type retourné par la fonction.

    On a donc pour Fonction() :
    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
    /*  Function  */
    int * Function(int la_taille)
    {  
      int * tab_a_envoyer;
      int i;
      /* Allocation */
      if( (tab_a_envoyer = (int*) calloc (la_taille,sizeof(int))) == NULL)
        {
          perror("Echec");
          exit(0);
        }  
      tab_a_envoyer[0] = 0;
      for(i=1;i<la_taille;i++)tab_a_envoyer[i]=tab_a_envoyer[i-1]+1;
      return tab_a_envoyer ;
    }
    3- Dans main(), il est inutile, sauf à vouloir provoquer une fuite mémoire, de faire une allocation. Celle-ci sera faite par appel de Fonction().

    4- main() doit retourner une valeur comme indiqué par son prototype.

    Ce qui nous donne :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
     
    /*  Prototype  */
    int * Function(int taille);
     
    /*  Main  */
    int main(void)
    {
      int *tableau_final;
      int nombre_case = 20;
      int i;
      /* Allocation */
      tableau_final = Function(nombre_case); // fonction
      for(i=0;i<nombre_case;i++)printf("%d\n",tableau_final[i]);
      return 0;
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut
    Merci pour la correction, avec une très bonne explication diogene

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

Discussions similaires

  1. fonction qui renvoie un tableau
    Par deubelte dans le forum C++
    Réponses: 24
    Dernier message: 26/05/2007, 01h51
  2. fonction qui renvoie un tableau
    Par GLSpirit dans le forum C++
    Réponses: 9
    Dernier message: 12/05/2007, 14h05
  3. fonction qui renvoie un tableau
    Par toto2022 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2007, 16h11
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  5. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 12h44

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