Смешанное поведение индексации для массива typedef? - PullRequest
0 голосов
/ 21 марта 2009

У меня есть typedef:

typedef unsigned char MyType[2];

Я передаю его функции, и в результате получается FAIL!

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

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

f(&a);
}

Манипулирование переменной a в main() работает с индексацией в 1 байт, поэтому a равно {0x45, 0x89} Однако в функции f индексация действует на 2 байта (sizeof тип).

Таким образом, в функции f, *m[1] в данном случае фактически изменяет память за пределы.

Почему это, что я забыл?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 21 марта 2009

Попробуйте:

(*m)[1] 

вместо *m[1]

1 голос
/ 21 марта 2009

А, просто решил после отказа! Скобки Мальчик, Скобки.

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

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

f(&a);
}
...