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 :

malloc tableau 2D + fonction + main


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut malloc tableau 2D + fonction + main
    Je voudrais creer une fonction create_table qui me permettera de creer un tableau dynamique 2D.

    en voici le code de mon main :
    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
     
    int main (void){
        int nb_col, nb_lig;
        char *grille=NULL;
     
      scanf("%d", &nb_col);
      scanf("%d", &nb_lig);
      create_table(grille, nb_lig, nb_col);
     
      initialisation_grille(grille, nb_lig, nb_col);
      draw_grille(grille, nb_lig, nb_col);
     
      free(grille);
     
      system("PAUSE");	
      return EXIT_SUCCESS;
    }
    Et voici le code de create_table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void create_table(char *grille, int nb_lig, int nb_col){
        grille=malloc(nb_col*nb_lig*sizeof(*grille));
         }
    Le programme se lance, mais des que j'ai entré mes nb_col et nb_lig le prog beug

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Puisque tu initialises grille dans create_table, tu dois transmettre son adresse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create_table((char **) &grille,nb_lig,nb_col);
    ...
    void create_table(char **grille, int nb_lig, int nb_col){
        *grille=malloc(nb_col*nb_lig*sizeof(**grille));
         }
    Dans ton code, c'est une copie de grille que tu initialises.

  3. #3
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    pourquoi avoir déclarer un pointeur sur pointeur?
    sacant que dans mon main j'ai déclarer char * grille;

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Dans ton code initial, quand tu appelles create_table avec comme premier paramètre grille, tu ne fais que transmettre une copie de grille à ta fonction (passage des paramètres par valeur).

    Quand tu ressors de ta fonction, grille n'est pas modifiée (affiche sa valeur avant et après avec un printf et tu verras).

    Tu dois donc transmettre son adresse pour que ta fonction puisse le modifier. D'où le char **.

    Ce qui te perturbe est que la valeur à modifier (initialiser) est un pointeur.
    Si cela avait été un int à initialiser dans ta fonction, tu aurais de toi-même (enfin j'espère !) transmis son adresse.

  5. #5
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Toujours un soucis, voila 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
    20
     
    void create_table((char **) &grille ,int nb_lig, int nb_col); 
    // Probleme de syntaxe
     
    int main (void){
        int nb_col, nb_lig;
        char *grille=NULL;
     
      scanf("%d", &nb_col);
      scanf("%d", &nb_lig);
      create_table(grille, nb_lig, nb_col);
     
      initialisation_grille(grille, nb_lig, nb_col);
      draw_grille(grille, nb_lig, nb_col);
     
      free(grille);// liberation de l'espace memoire precedement alloue
     
      system("PAUSE");	
      return EXIT_SUCCESS;
    }
    void create_table(char **grille, int nb_lig, int nb_col){
    *grille=malloc(nb_col*nb_lig*sizeof(**grille));
    }

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    regarde bien le code que je t'ai donné et notamment l'appel à create_table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create_table((char **) &grille,nb_lig,nb_col);

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

Discussions similaires

  1. passer un tableau issu d'un malloc a une fonction
    Par tixweb dans le forum Débuter
    Réponses: 6
    Dernier message: 09/07/2007, 07h14
  2. Réponses: 8
    Dernier message: 10/03/2006, 17h28
  3. la fonction main
    Par harvouj dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2006, 01h34
  4. [mise à jour tableau en fonction du button radio]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 30/12/2005, 11h41
  5. tableau et fonction en c++
    Par flobx dans le forum C++
    Réponses: 5
    Dernier message: 13/11/2005, 15h12

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