Я отлаживаю чью-то библиотеку elses (AGAR), и я столкнулся с ситуацией, когда указателю присваивается значение NULL в следующей строке кода, это не NULL.
Значение, отличное от NULL, вызывает ошибку сегмента!
Я не вижу проблемы в коде.
int AG_EventLoop(void)
{
AG_EventSource *src = AG_GetEventSource();
AG_EventSink *es;
...
for((es) = ((&src->epilogues)->tqh_first); (es) != NULL; (es) = ((es)->sinks.tqe_next)) {
es->fn(es, &es->fnArgs); // seg fault here should not have entered
}
...
}
В цикле for назначается первый элемент в очереди:
(es) = ((&src->epilogues)->tqh_first);
Отладчик показывает значения:
src->epilogues: 0x1bbd28
tqh_first: 0x0
tqh_last: 0x1bbd28
es: 0xfeeefeeefeeefeee
Если tqh_first равно 0x0 (NULL), откуда берется значение 0xfeeefeeefeeefeee для es?
Код не работает только в MINGW64 и работает как положено в Linux.