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 :

Allocation d'un tableau dynamique 2D


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut Allocation d'un tableau dynamique 2D
    Bonjour,

    Je cherche à faire une allocation dynamique d'un tableau à deux dimensions.
    J'ai écrit deux fonctions:

    Code c : 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
    void alloc2D(long** tab, long lig, long col)
    {
        long cpt = 0;
     
        tab = (long**) malloc (sizeof(long*) * lig);
        for(cpt = 0; cpt<lig; cpt++)
            tab[cpt] = (long*) malloc (sizeof(long) * col);
    }
     
    void free2D(long** tab, long lig, long col)
    {
        long cpt = 0;
     
        for(cpt = lig; cpt>0; cpt--)
            if(tab[cpt] != NULL) free(tab[cpt]);
     
        free(tab);
    }

    Et j'essaye de les utiliser comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long **tab = NULL;
    // les valeurs e lig et col sont entrées par l'utilisateur
    alloc2D(tab, lig, col);
    // utilisation du tableau
    free2D(tab, lig, col);
    Mais ça ne marche pas du tout... Ca compile sans problème mais j'ai une erreur "le programme doit fermer, blabla..." J'ai besoin de votre aide

    Merci d'avance.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Arwel Voir le message
    Bonjour,

    Je cherche à faire une allocation dynamique d'un tableau à deux dimensions.
    J'ai écrit deux fonctions:
    <...>
    Mais ça ne marche pas du tout... Ca compile sans problème mais j'ai une erreur "le programme doit fermer, blabla..." J'ai besoin de votre aide
    http://emmanuel-delahaye.developpez....ge=Page3#LXIII
    http://emmanuel-delahaye.developpez....ge=Page5#LXXXI

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void alloc2D(long** tab, long lig, long col)
    {
        long cpt = 0;
     
        tab = (long**) malloc (sizeof(long*) * lig);
    ....
    tab est ici local à la fonction et ne peut modifier l'argument qui a servi lors de l'appel à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long **tab = NULL;
    // les valeurs e lig et col sont entrées par l'utilisateur
    alloc2D(tab, lig, col); //tab est toujours égal à NULL
    Solution la plus naturelle (à mon goût) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    long** alloc2D( long lig, long col)
    {
        long cpt = 0;
        long ** tab = malloc (sizeof(long*) * lig);
    ....
        return tab;
    }
    ....
    tab = alloc2D( lig, col);
    if(tab != NULL)
    {
    ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    Merci pour vos réponses, ca marche bien.
    Mais comment utiliser une fonction pour la libération ? J'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(cpt = 0; cpt<lig; cpt++)
        {
            if(tab[cpt] != NULL) free(tab[cpt]);
        }
    free(tab);
    Ca marche dans le main (là ou a été déclaré tab) mais comment faire pour l'utiliser dans une fonction ?

  5. #5
    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
    Il suffit que les arguments de la fonction soient
    - le tableau de pointeurs tab
    - la taille de ce tableau lig
    (comme ta fonction free2D() sans le paramètre col qui ne sert à rien ici)
    Il ne devrait pas y avoir de problèmes. La fonction peut renvoyer void.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    Merci beaucoup ça marche impecc' !

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

Discussions similaires

  1. Allocation d'un tableau dynamique
    Par trall dans le forum Débuter
    Réponses: 5
    Dernier message: 07/05/2010, 13h51
  2. Réponses: 11
    Dernier message: 09/02/2010, 11h42
  3. problème allocation tableau dynamique
    Par ofinot dans le forum C++
    Réponses: 5
    Dernier message: 12/02/2008, 15h03
  4. Réponses: 10
    Dernier message: 24/05/2007, 09h27
  5. Echec d'allocation d'un tableau dynamique
    Par le y@m's dans le forum WinDev
    Réponses: 1
    Dernier message: 09/05/2007, 16h24

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