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!!!
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
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++
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, ta solution de faire du ligne par ligne me semble la meilleure... Adapté en c++, ça donne un truc comme ça:
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???
float*** f;
f= new float **[5];
for(int i =0; i < 5;i++)
{
f[i]=new float *[5];
for(int j =0; j < 5;j++)
{
f[i][j]=new float [5];
}
}
f[2][3][3]=123;
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:
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
tableauCube= new float ***[taille+2];
for(int i =0; i < taille+2;i++)
{
tableauCube[i]=new float **[taille+2];
for(int j =0; j < taille+2;j++)
{
tableauCube[i][j]=new float *[taille+2];
for(int k =0; k < taille+2;k++)
{
tableauCube[i][j][k]=new float [3];
}
}
}
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
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumTrouver taille du heap java
- ForumComment mettre à jour direct x
- ForumMettre mac os x sur clã usb
- articlesMettre mac os x en 64 bits
- ForumMettre os x sur g3 500 mhz
- articlesComment mettre mac os x sur pc
- ForumMettre 4 x 1 go corsair cl5 sur une p5ne possible
- ForumX cd gt dvd mettre des cd sur un dvd pour nunux
- Voir plus