Se connecter avec
S'enregistrer | Connectez-vous

Mettre un tableau n x n x n dans le heap?

Dernière réponse : dans Programmation

Bonjour à tous!
 
Je rencontre actuellement un gros problème (pour moi, mais je suis sur que ce n'est en fait rien ;-))
 
Alors voilà, j'expose ma situation. J'ai une classe, qui s'appelle cube, dont l'une des variables est un tableau de floats de 2x2x2, ou 3x3x3 etc.
 
Donc aucun problème, dans le prototype de la classe, je mets mon tableau float tableau[2][2][2], et j'initialise ce tableau à l'initialisation de ma classe.
 
Maintenant, le problème, c'est que je veux faire un tableau n*n*n, et c'est l'utilisateur qui doit en décider, en entrant l'ordre du cube lui-même.
 
Puisque le tableau n'a jamais al même dimensions, et qu'il ne peut pas être déclaré dans le prototype, je suis obligé de ne stocker qu'un pointeur vers ce tableau dans les membres de ma classe:
 
private:
float* tableau;
 
Et donc je suis obligé d'initialiser ce tableau à l'initialisation de la classe avec un truc dans le genre:
 
tableau = new float [taille][taille][taille];
 
Et c'est bien cette ligne qui me pose problème! Je dois mettre le tableau dans le heap, il ne doit pas être détruit à la fin de l'exécution de la méthode d'initialisation!
 
Et quoi que j'essaie, j'ai toujours une erreur!!!
 
Alors pour résumer ma question:
 
Comment faire pointer mon pointeur existant vers un tableau n x n x n, créé dans le heap?
 
Je serais infiniment reconnaissant si quelqu'un arrive à me tirer l'épine du pied!! Merci à tous!!!

Autres pages sur : mettre tableau heap

Lassé par la pub ? Créez un compte

Mhhh, je ne suis pas sûr de comprendre. Pour simplifier, je commence avec des tailles fixées, et sans parler de classe. Les deux lignes suivantes:

float*** f;
f = new float[2][2][2];

ne fonctionnent pas, cannot convert float(*)[2][2] to float***

Ou ske je me suis planté??

Merci!

en tous ca la solution de Dumoria fonctionne en C mais peut etre pas avec le new...

f=(float*)malloc(sizeof(float)*2);
for(i=0;i<2;i++)
f=(float*)malloc(sizeof(float)*2);
for(j=0;j<2;j++)
f[j]=(float*)malloc(sizeof(float)*2);

peut etre que cela peut fonctionner, mais je ne garantie rien et c'est du C, pas du C++

Mhhh, ça a l'air pas mal, et la première ligne fonctionne, mais après, j'ai un problème de d'assignement etnre float* et float

Pour ton exemple, je dois déclarer comment? float*** f, ou float* f?? Aucun des deux ne marche, je ne comprends pas?!

Merci!

Mhhh, ta solution de faire du ligne par ligne me semble la meilleure... Adapté en c++, ça donne un truc comme ça:

  1. float*** f;
  2.  
  3. f= new float **[5];
  4.  
  5. for(int i =0; i < 5;i++)
  6. {
  7. f[i]=new float *[5];
  8. for(int j =0; j < 5;j++)
  9. {
  10. f[i][j]=new float [5];
  11. }
  12. }
  13.  
  14. f[2][3][3]=123;
  15. cout << f[2][3][3] << endl;


qui fonctionne tout à fait!

Merci bcp!!!

Mais juste une petite question maintenant, comment détruire ce tableau lorsque je détruis la classe? Est-ce qu'un delete [] suffira à détruire tous les "étages" de ce tableau???

Alors voilà, j'ai appliqué cette méthode à mon programme, et ça donne ceci:

  1. tableauCube= new float ***[taille+2];
  2. for(int i =0; i < taille+2;i++)
  3. {
  4. tableauCube[i]=new float **[taille+2];
  5. for(int j =0; j < taille+2;j++)
  6. {
  7. tableauCube[i][j]=new float *[taille+2];
  8. for(int k =0; k < taille+2;k++)
  9. {
  10. tableauCube[i][j][k]=new float [3];
  11. }
  12. }
  13. }


float **** tableauCube est déclaré dans les entêtes.

En fait j'ai un tableau à taille x taille x taille x 3, pour stocker les couleurs RGB de chaque case

Aucune erreur à la compilation, par contre, le résultat n'est pas tout à fait celui attendu... Certaines valeurs du tableau ne sont parfois pas celle que je veux, pour une raison obscure... Je pense que ça vient du fait que le tableau n'est pas effacé à la destruction de la classe...

Et là je suis eprdu... comment dois-je procéder pour détruire totalement ces tableaux???

Merci

Et d'ailleurs, t'es sûr que c'est la même boucle qui détruit tout ça? Parce qu'il me semblerait plus logique de commencer par détruire la fin du tableau, si on commence par le début, on n'a plus aucun moyen de trouver la fin, non?
Lassé par la pub ? Créez un compte