Static Casting Masortingx à un pointeur

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... } }