Passer un tableau de pointeur au main

Passer un tableau de pointeur au main - C - Programmation

Marsh Posté le 27-01-2008 à 00:03:51    

Bonsoir a tous,  
 
J'ai un soucis, alors j'ai fais une fonction qui rempli un tableau par des caracteres au hasard.  
Ce tableau, je sais l'utiliser dans ma fonction mais impossible de l'utiliser dans le MAIN et je ne comprend pas pourquoi.
 
Voici des bouts de mon code; le MAIN
 

Code :
  1. char **code;
  2. int v,i,p,e,f;
  3.      
  4.         v=version();
  5.         i=taille_combi();
  6.         p=nb_partie();
  7. generateur(v,i,p,code);


 
Et la fonction;  

Code :
  1. void generateur(int version, int taille,int nbpartie, char **code)
  2. {
  3. int i,j,k,l,x;
  4. char couleur[]={'b','c','g','j','m','n','r','v'};
  5.     code=malloc(nbpartie * sizeof(char*));
  6.     if (code == NULL)
  7.     {
  8.         printf("Impossible d'allouer la memoire necessaire pour les parties !!!\n" );
  9.     }
  10.     for (i = 0; i < nbpartie; i++)
  11.     {
  12.         code[i] = malloc((taille + 1) * sizeof(char));
  13.         if (code[i] == NULL)
  14.         {
  15.             printf("Impossible d'allouer la memoire pour le code numero [%d] !!!\n",(i+1));
  16.         }
  17.         code[i][taille] = '\0';
  18.     }
  19.     srand(time(NULL));
  20.     for (i = 0; i < nbpartie; i++)
  21.     {
  22.         for (j = 0; j < taille; j++)
  23.         {
  24.             if(version==1)
  25.             {
  26.                 k=rand()%8;
  27.                 code[i][j] = couleur[k];
  28.             }
  29.             else
  30.             {
  31.                 do
  32.    {
  33.    k=rand()%8;
  34.    x=0;
  35.    for(l = 0; l < (j+1); l++)
  36.    {
  37.     if( code[i][l] == couleur[k])
  38.     {
  39.     x=1;
  40.     }
  41.     else if( l==j)
  42.     {
  43.     code[i][j] = couleur[k];
  44.     }
  45.                 }
  46.                 }
  47.    while(x!=0);
  48.   }
  49.  }
  50. }
  51. }


 
 
donc, si je place ceci; puts(code[3]); a la fin de la fonction, je sais afficher une ligne du code, tandis que si je le mets dans le main, ça plante !!!  
 
Merci pour ceux qui sauraient m'eclairer sur la raison pour laquelle je n'y arrive pas...  
 
Tchuss.
 

Reply

Marsh Posté le 27-01-2008 à 00:03:51   

Reply

Marsh Posté le 27-01-2008 à 01:45:20    

Normal. J'ai l'impression qu'en manipulant 'code' dans la fonction 'generateur', tu espères que ça modifiera la variable de même nom dans main(). Révise ta notion des pointeurs. 3 façons de contourner le problème :
 

  • Fait l'allocation de ta matrice 'code' dans main(). Dans ce cas tu pourras passer la valeur de code à ta fonction generateur()
  • Retourne l'adresse allouée dans generateur() à la fonction main(), du genre : "code = generateur(v, i, p);"
  • Utilise un "char ***" dans le prototype de generateur(). Un peu lourd.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed