Я не понимаю условие для gettint ошибка - поврежденный список с двумя связями (не маленький) -
В программе есть точка, в которой происходит сбой из-за поврежденного списка с двумя связями (немаленький).
В данный момент я не хочу знать, почему произошел сбой, но я хочу знать, как работают эти условия
if (__builtin_expect (P->fd_nextsize->bk_nextsize != P, 0) || __builtin_expect(P->bk_nextsize->fd_nextsize != P, 0))
malloc_printerr (check_action,"corrupted double-linked list (not small)", P, AV);
Здесь мы видим, что ошибка связана с двойным спискомнаблюдается, когда P-> fd_nextsize-> bk_nextsize! = P не выполняется или P-> bk_nextsize-> fd_nextsize не выполняется.
Но моя главная проблема заключается в том, что я не могу объяснить, как эта часть кода - P-> fd_nextsize-> bk_nextsize - ожидает P. Я ожидаю, что P-> fd_nextsize-> bk_nextsize - это P-> bk_nextsize.
Может быть, меня смущает структура двойного связанного списка в корзинах.
В настоящий момент я понимаю двойной связанный список следующим образом:
+------------------->+----------------+ <---------+
| | fd_nextsize | |
| | | |
| | | |
| +----------------+ |
| | | |
| |fd_nextsize | |
| | | |
| +----------------+ |
| | | |
| +bk_nextisize |--------------------+
| | | | |
| +----------------+ | |
| | |
| | |
| | |
| | |
| +---------------+ | |
| | P | | |
| | | | |
| +---------------+ | |
| | | | |
| |fd_nextsize +-----------+ |
| | | |
| +---------------+ |
| | | |
| +-----------+bk_nextsize | |
| | | | |
| | +---------------+ |
| | |
| | |
| | |
| +----------->+----------------+<-----------------+
| | bk_nextisize |
| | |
| | |
| +----------------+
| | |
+----------------------+ fd_nextsize |
| |
+----------------+
|bk_nextsize |
| |
+----------------+
Итак, если я ошибаюсь в своем понимании двойных связанных списков в корзинах (Важная информация, согласнок коду, а также в связи с тем, что мы используем fd_nextsize и bk_nextsize этот кусок не в маленькой корзине), пожалуйста, поправьте меня.Поскольку в данный момент это условие не имеет для меня никакого смысла.