编码有点疲惫,暂时休息一下大脑,写个bug report。
话说,那些短小精悍的bug,都是极其精巧别致的,是可遇而不可求的。它们往往用不了几行代码,却可以轻轻松松地穿过编译器、连接器、debugger的层层围捕,甚至是经验老到的程序员的第一遍review,最终撼动程序的质量。
从前,有一个双向(相邻节点互相指向)循环(首尾节点互相指向)链表(只有一个节点时前后指针都指向自己)。一位程序员同学要写一段逐个删除链表节点并释放节点内存的函数。这其实一点都不新鲜,江湖上最流行的套路就是整两个指针,一个指向当前节点,另一个指向下一个节点,一前一后从链表头开始依次向后移动。本来这位同学也想这么写,但是今天心情特别好,该同学想挑战一下:别人用两个指针才能玩转,我试试只用一个如何?于是,刷刷刷几笔写下了下面的代码(C语言):
T_LIST_NODE *node = head;
if (head != NULL)
{
do
{
node = node->next;
free(node->prev);
} while(node != head);
}