Appel de fontions avec un tableau de pointeurs en paramèmtre

[Résolu]
Signaler
Messages postés
36
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
26 mai 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Voilà j'ai cette fonction qui marche :

void alloue(int lig,int col){
int i,j;
  int l= 'A';
  T = (int **) malloc(col*sizeof(int*));
  if (T == NULL)
    printf("\nEchec lors de l'allocation memoire!");
  for (i=0;i<col;i++)  {
    T[i] =(int*)malloc(lig*sizeof(int));
    if (T[i] == NULL)
      printf("\nEchec lors de l'allocation memoire!");
  }
}

appelée ainsi : alloue(4,N); . T est déclaré globalement (int **T;)

Ensuite, je choisi de ne plus faire réfénrence à une variable globale dans alloue(4,N);  donc  j'ajoute un 3ème argument : le tableau dont on veut allouer de la mémoire :

void alloue(int **t,int lig,int col){
int i,j;
  int l ='A';
  //graphe
  t = (int **) malloc(col*sizeof(int*));
  if (t == NULL)
    printf("\nEchec lors de l'allocation memoire!");
  for (i=0;i<col;i++)  {
    t[i] =(int*)malloc(lig*sizeof(int));
    if (t[i] == NULL)
      printf("\nEchec lors de l'allocation memoire!");
  }
}

appelée ainsi : alloue(T,4,N); .Et ça marche pas . Quelqu'un peut m'aider ??

Spartan

3 réponses

Messages postés
116
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
14 juin 2012

Bon yavait longtemps que j'avais pas codé ca m'a fait plaisir de revoir un peu les joies des pionteurs...

Alors voila un truc ressemblant qui marche :

int** alloue(int lig,int col);
int main(int argc, char *argv[])
{
    int **t = alloue( 3, 12);
    printf("\n%d", 12);
   
    for (int i=0;i<3;i++)  {
      for (int j=0;j<12;j++)  {
          printf("\n%d", t[i][j]);
      }
  }
    system("PAUSE");
   
    return EXIT_SUCCESS;
}

int** alloue(int lig,int col){
int i,j;int n=0;
  //graphe
  int **t;
  t = (int **) malloc(col*sizeof(int*));
  if (t == NULL)
    printf("\nEchec lors de l'allocation memoire!");
  for (i=0;i<col;i++)  {
    t[i] =(int*)malloc(lig*sizeof(int));
    if (t[i] == NULL)
      printf("\nEchec lors de l'allocation memoire!");
  }
  printf("\nFini alloc?");
  for (i=0;i<lig;i++)  {
      for (j=0;j<col;j++)  {
          t[i][j] = n++;
          printf("\n%d", t[i][j]);
      }
  }printf("\nFini rempli?");
  return t;
}

Avec ça tu devrais arriver a faire ce que tu veux...non?
Messages postés
36
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
26 mai 2008

Ton code m'a bien aidé, merci . Le **t j'aurai du le déclarer dans int** alloue(int lig,int col) et le renvoyer au lieu d'en faire un paramètre de cette fonction. Reste à comprende. Peux-tu m'expliquer?(toi ou quelqu'un d'autre)

PS : ma fonction corrigée, ça peut toujours aider... :

int** alloue(int lig,int col){
  int i,j,**t;
  t = (int **) malloc(col*sizeof(int*));
  if (t == NULL)
    printf("\nEchec lors de l'allocation memoire!");
  for (i=0;i<col;i++)  {
    t[i] =(int*)malloc(lig*sizeof(int));
    if (t[i] == NULL)
      printf("\nEchec lors de l'allocation memoire!");
  }
  return t;
}
et T=alloue(4,N); sachant que T est une variable globale
Spartan
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Allocateur pour pointeur de pointeurs à cette adresse:
http://www.codyx.org/snippet_allocateur-pointeur-pointeurs_293.aspx
Plus rapide que d'allouer séparément la mémoire pour chaque pointeur. Un simple free suffis pour libérer toute la mémoire.

C++ (@++)<!--