为自己分配空指针

时间:2018-10-28 18:48:04

标签: c

最近,我遇到了一个奇怪的代码段。它是用C编写的内存池代码的一部分,(当然)大量使用地址算法。

我省略了多余的细节,而不是添加了一些评论:

void *head;
/* some memory allocation stuff, including assigning  allocated memory address to head */

/* allocating some memory pages */

/* OK, now allocation stuff is finished. head pointer still contains valid address */

head = *(void **)head;

什么是head = *(void **)head;?我们把头分配给自己吗?为什么?为了什么我将此行理解为“,我们将head当作指向void的指针,即void指针的地址。然后我们对其进行解引用,因此接下来我们将获得指向void的指针。然后将这个指针分配给head (直接前往??)”。

很显然,我错了,因为它可以成功运行生产代码示例。但这对我来说没有任何意义。伙计,这是什么把戏?

P.S。不幸的是,由于NDA,我无法粘贴完整的代码段。但是那里没有什么特别的了。

2 个答案:

答案 0 :(得分:2)

head = *(void**)head;分配一个指针void*指向head本身的指针(head)。

答案 1 :(得分:0)

如果head指向链接列表结构,并且链接列表的第一个元素是指向下一个元素的指针,则您的构造等效于

head = head->next;

结构不透明时。