最近我遇到了一段奇怪的代码片段。它是用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赋值给自己?为什么?有什么作用?我理解这行代码的意思是“我们将head视为指向void指针的指针,即void指针的地址。然后我们对其进行解引用,接下来就会得到指向void的指针。然后将该指针分配给head(head指向自身?)”。显然,我错了,因为这是一个成功运行的生产代码示例。但对我来说毫无意义。你们的诀窍是什么?注意:由于NDA,我无法粘贴完整的代码片段。但那里面已经没有什么特别的了。
head
被初始化为什么,就无法确定新值的目的。 - Mad Physicisthead=malloc(...)
@MadPhysicisthead=malloc(...)
- Uroboros