当前位置:  技术问答>linux和unix

list.h中删除元素函数的一段代码

    来源: 互联网  发布时间:2017-04-22

    本文导语:  #ifndef CONFIG_DEBUG_LIST static inline void list_del(struct list_head *entry) { __list_del(entry->prev, entry->next); entry->next = LIST_POISON1; entry->prev = LIST_POISON2; } #else extern void list_del(struct list_head *entry); #endif 查看下LIST_POISON1的定义: #define...


#ifndef CONFIG_DEBUG_LIST
static inline void list_del(struct list_head *entry)
{
__list_del(entry->prev, entry->next);
entry->next = LIST_POISON1;
entry->prev = LIST_POISON2;
}
#else
extern void list_del(struct list_head *entry);
#endif

查看下LIST_POISON1的定义:
#define LIST_POISON1  ((void *) 0x00100100 + POISON_POINTER_DELTA)
#define LIST_POISON2  ((void *) 0x00200200 + POISON_POINTER_DELTA)

再查看下POISON_POINTER_DELTA:
#ifdef CONFIG_ILLEGAL_POINTER_VALUE
# define POISON_POINTER_DELTA _AC(CONFIG_ILLEGAL_POINTER_VALUE, UL)
#else
# define POISON_POINTER_DELTA 0
#endif


entry->next到底指向哪了?这与entry->next=NULL是否效果相同?

|
参考http://blog.csdn.net/mznewfacer/article/details/7312313
如果链表里有节点,非空不会一直成立
static inline int list_empty(const struct list_head *head)
{
return head->next == head;
}

|
/*
 18  * These are non-NULL pointers that will result in page faults
 19  * under normal circumstances, used to verify that nobody uses
 20  * non-initialized list entries.
 21  */
 22 #define LIST_POISON1  ((void *) 0x00100100 + POISON_POINTER_DELTA)
 23 #define LIST_POISON2  ((void *) 0x00200200 + POISON_POINTER_DELTA)

以上是官方解释
LIST_POISON就是一段无效的地址区,当开发者误用到这个地址时,会发出页错误。

    
 
 

您可能感兴趣的文章:

  • c++ STL List查找遍历及各成员函数用法详细介绍
  • 谁能告诉我当调用List.add(String)后是在哪些函数中实现重画的?
  • solaris 下调用Posix共享内存函数 续!fierygnu(va_list) 来领分
  • php函数range/round/list用法实例
  • 大家注意vector, list, set, map成员函数erase
  • 基于C++ list中erase与remove函数的使用详解
  • C++ Lists(链表) 成员 remove():从list删除元素
  • STL list 指针元素的问题
  • C++ Lists(链表) 成员 reverse():把list的元素倒转
  • C++ Lists(链表) 成员 insert():插入一个元素到list中
  • C++ Lists(链表) 成员 size():返回list中的元素个数
  • C++ Lists(链表) 成员 unique():删除list中重复的元素
  • C++ Lists(链表) 成员 max_size():返回list能容纳的最大元素数量
  • C++ Lists(链表) 成员 push_front():在list的头部添加一个元素
  • C++ Lists(链表) 成员 push_back():在list的末尾添加一个元素
  • C++ Lists(链表) 成员 front():返回第一个元素
  • C++ Lists(链表) 成员 erase():删除一个元素
  • C++ Lists(链表) 成员 back():返回最后一个元素
  • C++ Lists(链表) 成员 clear():删除所有元素
  • C++ Lists(链表) 成员 begin():返回指向第一个元素的迭代器
  • C++ Lists(链表) 成员 remove_if():按指定条件删除元素
  • C++ Lists(链表) 成员 pop_front():删除第一个元素
  • C++ Lists(链表) 成员 pop_back():删除最后一个元素
  • C++ Lists(链表) 成员 rbegin():返回指向第一个元素的逆向迭代器
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有没有什么简便的方法可以从一个List控件中删除一条或多个记录?
  • C++ Lists(链表) 成员 empty():如果list是空的则返回true
  • java.awt 和java.util都有List,想调用awt的List而出现Ambiguous class错误怎么办?
  • HTML教程 iis7站长之家
  • error: expected specifier-qualifier-list before 'list_head
  • C++ Lists(链表) 成员 assign():给list赋值
  • 求 linux/list.h 部分解读list_entry()
  • C++ Lists(链表) 成员 merge():合并两个list
  • 使用XmlSerializer序列化List对象成XML格式(list对象序列化)
  • C++ Lists(链表) 成员 swap():交换两个list
  • python list使用示例 list中找连续的数字
  • C++ Lists(链表) 成员 resize():改变list的大小
  • src/client/sysint/client-state-machine.c:58: add_sm_to_completion_list: Assertion `s_completion_list_index < 256' failed是什么错误啊
  • C++ Lists(链表) 成员 get_allocator():返回list的配置器
  • 救急:url为product_list.jsp?dpt_code=01+product_type=0101,怎么样能让product_list.jsp接收到的是dpt_code=01&product_type=0101呢?
  • C++ Lists(链表) 成员 sort():给list排序
  • frame如何显示List? 50送上!
  • C++ Lists(链表) 成员 rend():指向list末尾的逆向迭代器
  • Linux 源码 list.h的编译问题
  • java命名空间java.awt类list.accessibleawtlist的类成员方法: list.accessibleawtlist定义及介绍
  • 读linux内核list.h遇到的问题
  • java命名空间java.awt类list.accessibleawtlist.accessibleawtlistchild的类成员方法: list.accessibleawtlist.accessibleawtlistchild定义及介绍
  • 轻量级快速的List实现 GapList


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,