关于指针算术的问题

时间:2010-03-31 21:26:33

标签: pointers warnings math

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

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

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

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

有更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:5)

指针算术使用基础类型的大小。如果int是4个字节:

int *p = some_address;
p++; 

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

答案 1 :(得分:1)

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