Acceder au elemen d'1e matrice en c

Bonjour,
Aidez moi SVP, je ss débutante en c .
bon mon probleme c'est que j'ai une matrice que j'ai declaré dans la fonction main() comme suit:
int ** matrice;
maintenant j'ai besoin de cette matrice dans une autre fonction (j'ai besoin de contenu selement , je ne veux pas appliqué des modifications sur cette matrice)
voici l'entete de ma fonction:
int gain ( int a, int b, int ** matrice, int taille_matrice);
en faite je veux faire ca dans cette fonction gain:
int g= matrice [a][b]+matrice[b][a];
return g;
mais le probleme que ca fonctionne pas et je sais dès le depart que ca ne fonction mais je ne sais pas pourquoi et j'ecrit koi poiur ke ca fonctionne ;((((((
SVP AIDEZ MOI C URGENT ET MERCI D'AVANCE
:((((
Configuration: Windows 7 Internet Explorer 8.0

6 réponses

  1. bon mon probleme c'est que j'ai une matrice que j'ai declaré dans la fonction main() comme suit:
    int ** matrice;

    non. Ceci est un pointeur vers un endroit où le programme est censé trouver une matrice.

    Mais tu n'as jamais crée de matrice.

    il faut que tu utilises malloc pour créer un espace mémoire dynamiquement.

    Si tu ne connais pas ça, apprend la création dynamique avec malloc, ou alors tu peux faire comme ça aussi :
    int matrice[10][12]; // créer véritablement une matrice 10 fois 12.
    0
    1. salut , merci de me repondre
      dans la fonction main()
      g declarée une matrice :
      ** matrice
      puis j'ai fais l'allocation dynamique avec malloc
      et j'ai fais une boucle pour la remplire en utilisan matrice[i][j]
      et maintenant mon probleeme c'est applé cette matrice et utilisé son contenu dans une fonction que j'ai appelé Gain
      mais quand je veu accéder au ellement de la matrice avec matrice [i][j] dans la fonction je ne peu pas
      :(((
      0
      1. pourtant, ça devrait marcher.
        1)Est-ce que tu arrives à afficher ta matrice avant d'appeler la fonction gain(), juste pour voir si tu as bien réussi à la remplir correctement ?
        2) comment appelles-tu la fonction gain() depuis ton main() ?
        0
    2. merciiii Pacorabanix,
      au niveau de main ()
      je peu affiché ma matrice nomallement
      voici mon code compet peu etre ke tu pourra m'aidé :)
      #include<stdio.h>
      #include<stdlib.h>
      int gain ( int a, int b, int ** matrice, int taille_matrice)
      {
      int g= matrice [a][b]+matrice[b][a]; //que dois je mettre ici pourque ca fonctionne??
      return g;
      }

      int main()
      {

      int ** matrice;
      int i,j, nb, resG;
      nb=10;
      // Allocation dynamique :
      matrice =(int**)malloc( nb* sizeof(int));
      for(i=0; i<nb,i++)
      {
      matrice[i]=(int*)malloc (nb*sizeof(int));
      }
      // remplissage de la matrice
      for (i=0;i<nb;i++)
      {
      for (j=0;j<nb;j++)
      {
      matrice[i][i]=i*j
      }
      }
      //affichage de la matrice
      for (i=0;i<nb;i++)
      {
      for (j=0;j<nb;j++)
      {
      printf("%d,%d", matrice[i][i]);
      }
      printf("\n");
      }
      // saisie
      printf("donner 1premier entier");
      scanf ("%d",&a);
      printf("donner le 2eme entier");
      scanf("%d",&b);
      // appel fonction gain
      resG= (a,b, matrice, nb); // mon probleme ici
      printf("voici le resultat obtenu: %d\n": resG);
      }
      voici mon programme simplifié j'espere que vous pouvez m'aider c urgent SVP.
      0
      1. merciiii Pacorabanix,
        au niveau de main ()
        je peu affiché ma matrice nomallement
        voici mon code compet peu etre ke tu pourra m'aidé :)
        #include<stdio.h>
        #include<stdlib.h>
        int gain ( int a, int b, int ** matrice, int taille_matrice)
        {
        int g= matrice [a][b]+matrice[b][a]; //que dois je mettre ici pourque ca fonctionne??
        return g;
        }

        int main()
        {

        int ** matrice;
        int i,j, nb, resG;
        nb=10;
        // Allocation dynamique :
        matrice =(int**)malloc( nb* sizeof(int));
        for(i=0; i<nb,i++)
        {
        matrice[i]=(int*)malloc (nb*sizeof(int));
        }
        // remplissage de la matrice
        for (i=0;i<nb;i++)
        {
        for (j=0;j<nb;j++)
        {
        matrice[i][i]=i*j
        }
        }
        //affichage de la matrice
        for (i=0;i<nb;i++)
        {
        for (j=0;j<nb;j++)
        {
        printf("%d,%d", matrice[i][i]);
        }
        printf("\n");
        }
        // saisie
        printf("donner 1premier entier");
        scanf ("%d",&a);
        printf("donner le 2eme entier");
        scanf("%d",&b);
        // appel fonction gain
        resG= (a,b, matrice, nb); // mon probleme ici
        printf("voici le resultat obtenu: %d\n": resG);
        }
        voici mon programme simplifié j'espere que vous pouvez m'aider c urgent SVP.
        0
        1. bon, alors dans la création :

          // Allocation dynamique :
          matrice =(int**)malloc( nb* sizeof(int));
          for(i=0; i<nb,i++)
          {
          matrice[i]=(int*)malloc (nb*sizeof(int));
          }

          il y a un souci je pense. Le premier tableau de base contient des int*, pas des int.
          Ce serait plutot : matrice =(int**)malloc( nb* sizeof(int*));

          comme ça à vue de nez. Si ça marchait avant sans problème, c'est que tu as beaucoup de chance !

          ainsi, ta notation avec les crochets dans ta fonction gain que tu essayais de faire devrait marcher maintenant.
          0
          1. merciiii
            matrice =(int**)malloc( nb* sizeof(int*));
            ca marche mé g une erreur de segmentation je ne sé pas ke dois je faire
            en faite je me demande si l'appel à la fonction Gain est correcte ou nn?
            resG= (a,b, matrice, nb);???
            0