如果链接列表中的某个指针是否已损坏,您会如何找到?
答案 0 :(得分:9)
在节点结构中引入魔术值。在新节点分配时初始化它。在每次访问之前,检查指针指向的节点结构是否包含有效的魔术。如果指针指向不可读的数据块,则程序将崩溃。为此,在Windows上有API VirtualQuery() - 在读取之前调用它,并确保指针指向可读数据。
答案 1 :(得分:3)
有几种可能性。
如果列表是双向链接的,则可以从前指针指向的位置检查后退指针,反之亦然。
如果您对预期的内存地址范围有所了解,可以查看。特别是链接列表是从有限数量的内存块中分配的,而不是单独分配每个节点。
如果节点中包含一些可识别的数据,您可以在列表中运行并检查可识别的数据。
在我看来,这就是其中一个问题,其中面试官并不期待一个快速的答案,而是对问题的分析,包括你的进一步问题。
答案 2 :(得分:1)
这有点痛苦,但你可以在调试器遇到它们时记录每个指针的值,并验证它与你期望找到的一致(如果你希望指针为NULL ,确保它为NULL。如果你希望指针指向一个已经存在的对象,请验证该对象的地址是否具有该值等。)。
答案 3 :(得分:1)
答案 4 :(得分:0)
几个调试器/绑定检查器会为你做这个,但是这个问题的一个便宜而快速的解决方案是
当字段'值不匹配时,这表示: