1 2 3 4
| unsigned** m_mask;
........
m_mask = (unsigned**)p;
m_mask[i][j]=0; |
Ce transtypage est incorrect. Le contenu de m_mask ne peut etre l'adresse d'un pointeur. Lors de l'évaluation de m_mask[i], l'adresse calculée correspond à
adresse(m_mask)+ i* sizeof(unsigned int*)
puisque tu as déclaré que m_mask est un pointeur sur unsigned int*.
m_mask[i], est du type unsigned int * et l'adresse de m_mask[i][j] est alors calculée à partir du contenu m_mask[i] (d'où le plantage)
*(adresse( m_mask)+ i* sizeof(unsigned int*))+j*sizeof(unsigned int)
Ce n'est pas du tout l'accès aux éléments du tableau 2D
Fais toi même le calcul des adresses
p[Nombre de colonnes*i+j] = ...
puisque tu ne peux pas créer directement un tableau 2D parce que les deux dimensions du tableau sont inconnues à la compilation
Ou tu construis effectivement un tableau de pointeurs:
1 2 3 4 5 6 7 8
| unsigned** p = new (unsigned *)[nombre de lignes];
p[0] = new unsigned[nombre de lignes*nombre de colonnes];
for(int i=1; i<nombre de lignes; i++) p[i] = p[0]+i*nombre de colonnes
....
p[i][j] = ....
.....
delete[] p[0];
delete[] p; |
Dernière remarque, ta boucle for ne correspond pas à la taille réservée pour ton tableau ( voir les divisions par 32)
Partager