- Katılım
- 24 Şubat 2018
- Mesajlar
- 25,190
Aşağıdaki örnek koddan gidelim. Burada bir EVENT yapısı tanımlı. 20 bytelık da bir "data" array var. Bu data array içerisine de EVENT_BUTTON veya daha farklı bir yapıyı yerleştireceğiz. Burada hemen bir risk ortaya çıkıyor. Eğer EVENT_BUTTON yapısına fazla eleman eklersek ve yapının boyutu 20 byte'ı geçerse, derleyici bize en ufak bir uyarı dahi vermeyecek ve programı başarılı bir şekilde derleyecek. Ama sonra programı çalıştırınca bellekte birşeyleri bozacağız. Ya program tamamen çökecek, veya kestirilemez şekilde yanlış çalışacak.
Kod:
enum EVENT_TYPES
{
ET_BUTTON,
ET_ENCODER,
ET_NETWORK,
ET_TIMER,
};
typedef struct
{
enum EVENT_TYPES type;
unsigned char data[20];
} EVENT;
typedef struct
{
enum BUTTON_TYPES type;
unsigned int id;
enum BUTTON_ACTIONS action;
unsigned int duration;
} EVENT_BUTTON;
#define event_button_init(event, _type, _id, _action, _duration) \
EVENT event; \
{ \
event.type = ET_BUTTON; \
EVENT_BUTTON* p = (EVENT_BUTTON*)event.data; \
p->type = _type; \
p->id = _id; \
p->action = _action; \
p->duration = _duration; \
}