能释放所有链表的程序

902阅读 0评论2008-04-11 sss0213
分类:C/C++

// 功能: 释放链表( 要求: 链表节点的第一个元素为 next 指针 ) // 参数: __head_addr : 链表头指针( _head )的地址( &_head ). 实为指针的指针.
 //       struct node_t
//       {
//           struct node_t *next;
//           ...
//       };
//       struct node_t *_head = NULL;
//       ...
//       free_list( &_head );
static void free_list( void *__head_addr )
{    
 void *_head, *_free;      // 取链表头指针    
 _head = *( void ** )__head_addr;     
 while( NULL != _head )    
 {
         _free = _head;          //
   _head = _head->next         //   因为 next 指针为节点的第一个元素   
      //   又因 _head 为节点首字节的地址       
  //   所以 _head 为 next 指针的地址        
 //   所以 next = *_head         _head = *( void ** )_head;      
    free( _free );   
  }   
   // 将链表的头指针置空    
 *( void ** )__head_addr = NULL;
}
上一篇:C语言中关于时间的函数
下一篇:巧妙的sqlite回调函数