Присвоение NULL компилятору gcc не присваивает NULL - PullRequest
0 голосов
/ 13 января 2019

Я отлаживаю чью-то библиотеку 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.

...