【问题标题】:Question on Pointer Arithmetic关于指针算术的问题
【发布时间】:2011-02-03 03:17:02
【问题描述】:

大家好! 我正在尝试创建一个内存管理系统,以便用户可以调用我创建的方法 myMalloc。我有一个链表来跟踪我的空闲内存。我的问题是当我试图在我的链接列表中找到一个空闲位的结尾时。我正在尝试将该部分(位于链接列表中)中的可用内存大小添加到指向可用空间前面的指针,如下所示。

void *tailEnd = previousPlace->head_ptr + ((previousPlace->size+1)*(sizeof(int));

我希望这会给我一个指向该段末尾的指针。但是,我不断收到警告:

“算术中使用的'void*'类型指针”

有没有更好的方法来做到这一点?谢谢!

【问题讨论】:

    标签: pointers warnings math


    【解决方案1】:

    指针算法使用底层类型的大小。如果 int 是 4 个字节:

    int *p = some_address;
    p++; 
    

    将 p 增加 4 个字节。 void 不能用于指针算术,因为 void 没有关联的大小。如果要对 void 指针进行字节大小的运算,则需要将指针转换为字节大小的类型。

    【讨论】:

      【解决方案2】:
      int *tailEnd = ( int* ) ( previousPlace->head_ptr + ((previousPlace->size+1)*(sizeof(int)) );
      

      【讨论】:

      • 谢谢!!对于引用此内容的其他人,我还应注意,如果需要,您可以在之后将其转换回 void*。
      猜你喜欢
      • 1970-01-01
      • 2016-08-19
      • 2023-03-10
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多