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 :

Tableau à 2 dimensions avec utilisation de MALLOC


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut Tableau à 2 dimensions avec utilisation de MALLOC
    Tout d'abord bonjour à tous,

    J'ai, comme vous vous en doutez, un petit problème...
    Voici le bout de code qui me chiffone, j'expliquerais après ce que je ne trouve pas normal :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Case Case;
    struct Case
    {
        int valeur;
        int affichage;
    };
     
    int main()
    {
        int i;
        int j;
        int nbreCaseLargeur = 10;
        int nbreCaseHauteur = 5;
        Case ** tab = NULL;
     
        tab = malloc (nbreCaseLargeur * sizeof(Case *));
     
        if (tab != NULL)
        {
            for (j=0; j<nbreCaseHauteur; j++)
            {
                tab[j] = malloc (nbreCaseHauteur * sizeof(Case));
     
                if (tab[j] == NULL)
                {
                    printf("Erreur de reservation");
                }
            }
        }
     
        for (i=0; i<nbreCaseLargeur; i++)
        {
            for (j=0; j<nbreCaseHauteur; j++)
            {
                tab[i][j].valeur = 0;
                tab[i][j].affichage = 0;
                    printf("%d - %d\n",i,j);
            }
        }
     
        for (i=0; i<nbreCaseLargeur; i++)
        {
            free(tab[i]);
        }
        free(tab);
    }
    D'après ce que je pense, je réserve un tableau de nbreCaseLargeur parties contenant chacune un tableau de nbreCaseHauteur parties qui seront des Case (structure créée).

    Le problème se passe ici :
    tab[i][j].valeur = 0;
    tab[i][j].affichage = 0;
    Je pensais donc qu'en appelant par exemple,
    tab[8][3].valeur = 0;
    cela marcherait... Mais ce n'est pas le cas... Par contre,
    tab[3][8].valeur = 0;
    marche !

    Pourquoi la première dimension (qui pour moi était les nbreCaseLargeur parties)
    se trouve dans le second [] ?

    Je pourrais tout simplement inverser les i et j, mais je n'aurais pas compris pourquoi il y aurait un problème et cela pourrait se reproduire...

    Donc si quelqu'un avait l'âme charitable à m'expliquer ^^

    Merci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Déjà un ptetit problème dès le début

    Citation Envoyé par johnalias110
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        tab = malloc (nbreCaseLargeur * sizeof(Case *));
    
        if (tab != NULL)
        {
            for (j=0; j<nbreCaseHauteur; j++)
            {
                tab[j] = malloc (nbreCaseHauteur * sizeof(Case));

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut
    Je suis désolé souviron34 mais je ne vois pas mon erreur...

    Les variables étant définies et bien initialisées... doivent-elles être inversées ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut
    Merci souviron34...

    Je me suis penché sur ce que tu m'as dis... Et effectivement mon erreur venait de là... Seul nbreCaseHauteur (au lieu de nbreCaseLargeur) parties de mon tableau possédaient nbreCaseHauteur allocations...

    Encore merci !

Discussions similaires

  1. [PHP 5.2] creer tableau à 2 dimensions avec 3 variables.
    Par ju0123456789 dans le forum Langage
    Réponses: 4
    Dernier message: 13/05/2009, 13h17
  2. Tableau à 3 dimensions avec données string & numériques
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/02/2009, 11h33
  3. Réponses: 15
    Dernier message: 24/12/2006, 14h28
  4. créer un tableau 2 dimensions avec Malloc
    Par nimportekoi dans le forum C
    Réponses: 14
    Dernier message: 15/11/2006, 13h01
  5. allouer un tableau 2 dimensions avec shmget.
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 12/06/2006, 11h11

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