J’ai la masortingce M:
float M[4][3] = { 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0};
Et j’ai besoin de lancer M dans le but d’utiliser la méthode “foo”:
foo(float **masortingx){ printf("%f",masortingx[0][0]); }
J’ai compilé avec succès le code en utilisant:
foo( (float**) M )
Mais quand je l’ai exécuté, j’ai eu une faute de segment. Qu’est-ce qui ne va pas? J’utilise g ++ dans Ubuntu Oneiric.
Merci d’avance.
Ok, merci Luchian, mais qu’en est-il d’utiliser:
float **M = new float*[4]; M[0] = {0,0,0};
Je sais que cela ne comstack pas, mais y at-il quelque chose de similaire?
Si vous voulez (ou devez) faire le calcul vous-même, évitez le casting:
void foo(float **pmasortingx) { float *masortingx = *pmasortingx; for (int r = 0; r < 4; ++r) { for (int c = 0; c < 3; ++c) printf("%f ", matrix[(r * 3) + c]); printf("\n"); } } float M[4][3] = { 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 }; int main() { float *p = &M[0][0]; foo(&p); }
Mais ce code est moche et sujet aux erreurs, suivez si possible les conseils de Luchian et corrigez la déclaration.
Ok, le meilleur vieux:
float **M = new float*[4]; for(int i=0; i<4; i++){ M[i] = new float[3]; for(int j=0; j<3; j++){ M[i][j] = something... } }