[英]Corrupt pointer in a linked list
如果鏈表中的一個指針是否已損壞,您如何才能找到它?
在節點結構中引入神奇的值。 在新節點分配時初始化它。 在每次訪問之前,檢查指針指向的節點結構是否包含有效的魔術。 如果指針指向不可讀的數據塊,則程序將崩潰。 為此,在Windows上有API VirtualQuery() - 在讀取之前調用它,並確保指針指向可讀數據。
有幾種可能性。
如果列表是雙向鏈接的,則可以從前指針指向的位置檢查后退指針,反之亦然。
如果您對預期的內存地址范圍有所了解,可以查看。 尤其如此,鏈表是從有限數量的內存塊中分配的,而不是單獨分配每個節點。
如果節點中包含一些可識別的數據,則可以運行列表並檢查可識別的數據。
這對我來說就像其中一個問題,其中面試官不期待一個快速的回答,而是對問題的分析,包括你的進一步問題。
這有點痛苦,但您可以在調試器遇到它們時記錄每個指針的值,並驗證它與您期望找到的一致(如果您希望指針為NULL,請確保它是NULL。如果您希望指針指向已存在的對象,請驗證該對象的地址是否具有該值,等等。
Yuo可以保持雙重鏈接列表。 然后你可以檢查node-> child-> parent == node(雖然如果node-> child已經損壞,這有可能導致異常)
幾個調試器/綁定檢查器將為您執行此操作,但這個問題的便宜和快速解決方案是
當字段'的值不匹配時,這表示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.