Vermindering van het probleem tot zijn essentie maakt het gemakkelijker te begrijpen
Code:
#include <time.h>
#define BOGUSTID 9999
timer_t tid;
#if WANT_SEG_FAULT
tid = (timer_t) BOGUSTID
#else
int tval=BOGUSTID;
tid = (timer_t) &tval;
#endif
De juiste header wordt opgenomen, maar een aanname wordt gemaakt dat tid in staat is het opslaan van een waarde zoals hierboven getoond. Het algemeen deze veronderstelling onjuist is als timer_t wordt gespecificeerd als een ondoorzichtig type in
POSIX.1. Op de meeste versies van
GNU/Linux is timer_t daadwerkelijk door gedefinieerd
Code:
#define timer_t void *
In uw voorbeeld probeer je spullen 9999 in een leegte * - die niet is ingeschakeld.
BTW, is uw oplossing defect ook. tid wordt niet ingesteld op 9999, maar naar het adres van tvål.