2009-03-21 6 views
0

J'ai un typedef:Comportement d'indexation mixte pour un tableau typedef?

typedef unsigned char MyType[2]; 

Je passe à une fonction et le résultat est FAIL!

void f(MyType * m) 
{ 
*m[0] = 0x55; 
*m[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 

La manipulation de la variable a dans main() travaux sur l'indexation des 1 octet, donc a est égal à {0x45, 0x89}. Cependant dans la fonction f l'indexation agit sur 2 octets (le type sizeof). Donc, dans la fonction f, *m[1], dans ce cas, est en train de modifier la mémoire en dehors des limites.

Pourquoi est-ce que j'ai oublié?

Merci.

Répondre

4

Essayez:

(*m)[1] 

au lieu de *m[1]

1

Ah juste travaillé dehors après avoir abandonné! Supports Boy, Supports.

void f(MyType * m) 
{ 
(*m)[0] = 0x55; 
(*m)[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 
+0

Pourquoi typedef en premier lieu? (* m) [0] est moche. – sigjuice

+0

Je travaille sur une API pour une application embarquée et expérimente avec typedef array pour les interfaces publiques comme un indice de programmation à la taille du tableau plutôt que de répondre après avoir lu les docs ou utiliser un IDE comme eclipse pour informer au moment du dev. Donc, le désordre est seulement au point d'entrée. – Oliver

+0

C'est un peu embarrassant de voir cette question ici - un moment de frustration/de stupidité - de toute façon j'ai essayé et j'ai décidé que ce n'était pas une bonne idée. – Oliver

Questions connexes