取消引用被强制转换为双指针的指针

dereferencing pointer that was cast to double pointer

本文关键字:指针 转换 引用 取消      更新时间:2023-10-16

我在理解这两行代码时遇到了一些问题。

T* Result = Free;
Free = *((T**)Free);

其中T是一个模板类,Free定义为;

T* Free;

它只是创建一个指向其他内存地址的新指针吗?

http://jfdube.wordpress.com/2011/10/06/memory-management-part-2-allocations-tracking/

这是New()函数中Freelist类的上下文。

Free = *((T**)Free);

我认为这可以更清楚地写为:

Free = (T *) *Free;

这两个语句都依赖于未定义的行为,将T视为T *指针。从概念上讲,他们正在做的是将*Free分配给Free。例如,如果Tint,则该语句将int重新解释为指向int的指针,并将其分配到原始指针的上方。

至于这有什么意义,这取决于更大的背景。代码很粗略;这可能是天才,也可能是愚蠢。