我正在调试其他人的库(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分配了队列中的第一项:
(es) = ((&src->epilogues)->tqh_first);
调试器显示值:
src->epilogues: 0x1bbd28
tqh_first: 0x0
tqh_last: 0x1bbd28
es: 0xfeeefeeefeeefeee
如果tqh_first为0x0(NULL),则来自es的值为0xfeeefeeefeeefeee?
该代码仅在MINGW64中失败,并在Linux中按预期工作。