Problème d'allocation d'un tableau dans une fonction

Problème d'allocation d'un tableau dans une fonction - C++ - Programmation

Marsh Posté le 10-03-2004 à 12:01:54    

Bonjour, voici mon problème: dans une fonction quelconque, je souhaite appeller une autre fonction en lui passant comme paramètre un tableau 2D non encore alloué au niveau de la taille. Un exemple simplifié donnerait ca :
 

Code :
  1. int (*Tab)[10];
  2.     test(Tab);
  3.     int i,j;
  4.     for (i=0;i<10;i++)
  5.     {
  6.         for (j=0;j<10;j++)
  7.             cout << Tab[i][j] << " " ;
  8.         cout << endl;
  9.     }


 
Puis dans la fonction, j'alloue la place pour mon tableau et je le rempli. Par exemple comme ca:

Code :
  1. void test(int (*Tab)[10])
  2. {
  3.     int i,j;
  4.     Tab=new int[10][10];
  5.     for (i=0;i<10;i++)
  6.         for (j=0;j<10;j++)
  7.             Tab[i][j]=i+j;
  8.     for (i=0;i<10;i++)
  9.     {
  10.         for (j=0;j<10;j++)
  11.             cout << Tab[i][j] << " " ;
  12.         cout << endl;
  13.     }
  14. }


 
Mon problème est alors qu'apparement, la création de mon tableau se fait localement et que je ne peux plus y accéder quand je sors de ma fonction. J'ai essayé de passer le tableau en static, mais au final ca devra être dans une librairie à part et le static n'a pas l'air de passer :'( Quelqu'un aurait il une idée pour que je puisse éviter la destruction de mon tableau quand je sort de ma fonction "test" ?
Merci par avance  :)


Message édité par Darsh le 10-03-2004 à 12:19:43
Reply

Marsh Posté le 10-03-2004 à 12:01:54   

Reply

Marsh Posté le 10-03-2004 à 14:30:58    

Tu dois faire une boucle pour allouer les tableaux les uns après les autres, en gros :

Code :
  1. for(int i=0; i<10; i++)
  2.    Tab[i] = new int[10];

 
 
Juste en passant, essaye de mettre les noms des variables en minuscule, la première lettre en majuscule est utilisé pour les noms des classes (bien sur ce n'est qu'une directive).

Reply

Marsh Posté le 10-03-2004 à 14:31:01    

Darsh a écrit :

la création de mon tableau se fait localement et que je ne peux plus y accéder quand je sors de ma fonction

La création de ton tableau n'est pas locale, un bout de mémoire alloué par new / malloc reste alloué jusqu'à sa désallocation manuelle.
 
Ce qui est détruit, c'est le pointeur. Le pointeur passé à ta fonction est copié lorsqu'il est passé à test(). En sortie, il est détruit, ton pointeur global n'a pas changé.
 
Donc, copie par référence ou pointeur de pointeur. Ou pointeur vers une vraie classe array, pas un truc genre int* [10] qui pètera dès que tu auras besoin de 11 éléments.

Reply

Marsh Posté le 10-03-2004 à 14:51:27    

Merci bcp :-)

Reply

Sujets relatifs:

Leave a Replay

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