Partage
  • Partager sur Facebook
  • Partager sur Twitter

Matrice dynamique dans une fonction

Sujet résolu
    19 décembre 2006 à 22:21:24

    Bonsoir tout le monde,

    J'aurais besoin de quelques explications à propos d'un petit programme en C.

    Donc voilà j'ai réussi à faire un tableau a deux dimensions dynamique de cette façon :

    grille_bis = malloc(nbLignes * sizeof(unsigned short));

    if(grille_bis == NULL) exit(0);

    for(i=0; i < nbLignes; i++)
    {
            grille_bis[i] = malloc(nbCol * sizeof(unsigned short));
            if(grille_bis[i] == NULL) exit(0);
    }


    Ensuite je voudrais remplir chaque case du tableau, donc j'ai essayé ça :

    void remplissage(unsigned short *grille‚ unsigned short nbLignes‚ unsigned short nbCol)
    {

       unsigned short x‚y;

       for(x = 0 ; x <= nbLignes–1 ; x++)
       {
            for(y = 0 ; y <= nbCol–1 ; y++)
            {
                 grille[x][y] = rand()%11;
            }
       }
    }


    Et enfin j'appelle la fonction ainsi :

    remplissage(grille_bis‚ nbLignes‚ nbCol);


    L'erreur que me donne le compilateur est "error C2109 : un indice requiert un type tableau ou pointeur"

    J'avoue être complétement perdu, alors qu'en statique c'est beaucoup plus simple... :(

    Merci d'avance pour vos réponses ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      19 décembre 2006 à 22:27:51

      C'est quoi un unsigned short?
      • Partager sur Facebook
      • Partager sur Twitter
        19 décembre 2006 à 22:32:33

        C'est un entier non signé court. :)
        • Partager sur Facebook
        • Partager sur Twitter
          19 décembre 2006 à 22:37:23

          Pour faire :

          grille_bis[i] = malloc(nbCol * sizeof(unsigned short));


          Il faut que grille_bis[i] puisse contenir une adresse vu que malloc renvoi une adresse mémoire donc grille_bis[i] doit faire la taille d'un int : taille d'une adresse mémoire : 2 octets sur un système 16 bits, 4 pour un 32 et 8 pour un 64 (un int fait toujours la taille d'un adresse mémoire donc cela fonctionne sur tout les sysèmes).

          De plus, je te conseille de mettre unsigned short int à la place de unsigned short quand tu as besoin d'utiliser un tel type, c'est plus compréhensible :)
          • Partager sur Facebook
          • Partager sur Twitter
            19 décembre 2006 à 22:38:01

            essaie en mettant en rajoutant une * avant "grille_bis"
            unsigned short **grille
            • Partager sur Facebook
            • Partager sur Twitter
              19 décembre 2006 à 22:49:49

              Alors déjà Caribou87, merci pour l'indication à propos de unsigned short/int pour contenir une adresse.

              Par contre je prefère garder unsigned short car j'ai appris comme ça et maintenant c'est ancré dans ma tête :p

              Sinon minirop je n'ai plus d'erreur donc merci beaucoup mais j'aimerais bien avoir une explication si possible :D


              Edit: j'ai parlé trop vite en fait, lors de la création de la matrice le malloc retourne tout le temps NULL... :(
              • Partager sur Facebook
              • Partager sur Twitter
                19 décembre 2006 à 23:41:56

                Citation : Genezis

                Sinon minirop je n'ai plus d'erreur donc merci beaucoup mais j'aimerais bien avoir une explication si possible :D


                les crochets déférence implicitement le pointeur tab[i] équivaut à *(tab+i) donc pour pouvoir utiliser deux fois les crochets, faut deux *, tab[i][j] correspond à *(*(tab+i)+j) (pas sur)
                • Partager sur Facebook
                • Partager sur Twitter
                  20 décembre 2006 à 11:20:04

                  Mais il faut quand même utiliser des int et non des short int sinon la case de ton tableau ne sera pas assez grande pour contenir ton adresse.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 décembre 2006 à 20:03:16

                    Ok minirop, je crois avoir compris :)

                    Toutes les erreurs sont maintenant reglées et ça marche impec !

                    Merci à vous !

                    @ Caribou87 : j'ai suivi tes conseils et j'ai pris des int :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Matrice dynamique dans une fonction

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown