Dotyczy arm7, kompilator to gcc.
Więc mam tak:
struct struktura{ unsigned short a; unsigned short b; };
struktura * moja_struktura;
char * bufor = malloc(1000); Na poczatku do bufora zapisuje jakies dane np.
memcpy(bufor, '0',13);
dalej robie tak:
moja_struktura = bufor + 13; moja_struktura->a = 0xbbaa;
No i okazuje sie, ze ostatni bajt danych jest nadpisywany starszym bajtem zmiennej 'a' jezeli struktura jest przesunieta w buforze o nieparzysta liczbe razy.
Po skompilowaniu wyglada to niby dobrze, bo tak:
0xE51B201C ldr r2, [r11, #-28] // r2 adres pierwszego bajtu strukt. 0xE3A03006 mov r3, #0x00000006 0xE1C230BC strh r3, [r2, #12]Jak pozbyc sie tego problemu? Bo dopisywac do parzystej liczby bajtow raczej nie moge.