In een dubbelcirkelige gekoppelde lijst kunnen we de beschadigde aanwijzer oplossen als een van de aanwijzers (vorige of volgende aanwijzer) is beschadigd.
Als de volgende aanwijzer niet correct is, kunnen we de lijst omgekeerd doorlopen en dan kunnen we deze corrigeren, of anders als de vorige aanwijzer niet correct is, kunnen we de lijst vooruitlopen om deze te corrigeren.
Nu moeten we nadenken over het identificeren van een beschadigde link (aanwijzer) in een lijst. We gebruiken om dynamisch geheugen ( malloc
of calloc
) voor elke knoop afzonderlijk toe te wijzen. Als we vaak malloc
of calloc
aanroepen voor klein geheugen, kan dit van invloed zijn op de prestaties van het systeem. In plaats daarvan kunnen we in het beginstadium een grote rommel van heap-geheugen toewijzen en dan kunnen we onze eigen geheugentoewijzingsfunctie implementeren voor elke knooppuntcreatie. En gebruik dit ook alleen voor het maken van lijstknooppunten om beschadigde links van de lijst te identificeren.
Dit verhoogt de prestaties van het systeem en het zal ook helpen om vast te stellen of de link van een knooppunt beschadigd is of niet, door de limieten te controleren van het initiële geheugen dat is toegewezen aan de lijst.
Zodra we een pointer naar een knooppunt krijgen, moeten we eerst de onderstaande controles uitvoeren voordat we toegang krijgen tot de gegevens in dat knooppunt.
check_limit(node);
check_limit(node->next);
check_limit(node->previous);
And also we can check whether the node->previous
is equal to current_node
.
After this also there may be possibility of node->next
might be pointing to wrong address but inside the initial memory limit. In this case we can read node->next->previous
(this will not leads to crash, even if next
is pointing wrong address but inside the initial memory limit) and check whether it is equal to node
or not.
En ook ongebruikte begingeheugenruimte moet altijd NULL
worden ingesteld (met memset
).
Op deze manieren kunnen we de 99% van de beschadigde aanwijzers in een lijst achterhalen.