Heyy大家! 我正在尝试创建一个内存管理系统,以便用户可以调用myMalloc,这是我创建的一个方法。我有一个链表,跟踪我的空闲记忆。我的问题是当我试图在链表中找到空闲位的结尾时。我试图将该部分中的内存大小(在链接列表中)添加到指向可用空间前面的指针,就像这样。
void *tailEnd = previousPlace->head_ptr + ((previousPlace->size+1)*(sizeof(int));
我希望这会给我一个指向该段末尾的指针。但是,我一直收到警告:
“算术”中使用的类型'void *'的指针
有更好的方法吗?谢谢!
答案 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)) );