2016-09-23 136 views
1

在我的代码中,我被要求返回一个指向heap_ptr旧值的指针,并将heap_ptr移动bytes_alloc的数量。我已经声明heap_ptr为void *heap_ptrheap_ptr = mmap(NULL, 2*4096, ...)来为heap_ptr指定8192个字节。我的问题是,由于bytes_alloc是int类型的,我不确定是否正确地将heap_ptr移动了2000个字节。我是否应该使用像heap_ptr = (void *)((char *)heap_ptr + (char)bytes_alloc)这样的bytes_alloc?如何将指针变量移动指定的字节数?

这里是我的功能:

void heap_alloc(int bytes_alloc) //bytes_alloc is 2000 
{ 
    void *temp_heap_ptr; //teporary pointer to my mmap heap_ptr 

    heap_ptr = (void *)((char *)heap_ptr + bytes_alloc) //this is where my question is 

    return (temp_heap_ptr); 
} 
+1

将返回未初始化的变量'temp_heap_ptr',我假设你的意思是写'该行temp_heap_ptr ='。另外,一个'void'函数可能不会返回一个值。请尝试发布真实的代码,否则答复者必须对真实的代码进行很多猜测。 –

+0

“//指向我的mmap heap_ptr的teporary指针” - nope,它是一个没有特别指向的临时指针,因为你从未将它设置为某种东西。 – immibis

回答

2

由物体的大小指针运算动作被指向的。因此,在表达式:

(char *)heap_ptr + bytes_alloc 

指针是由许多char s,这等于说该字节数进行调整,因为char被定义为1个字节。

bytes_alloc本身的类型本身不影响计算。

请注意,您不需要投影到void *,就有隐式转换。避免不必要的强制转换让您的代码更易于阅读是一种很好的做法。

-1

如果你想在前面heap_ptr返回一个指针bytes_alloc字节,

void *heap_alloc(int bytes_alloc, void *heap_ptr) { 
    return (void *)((char *)heap_ptr + bytes_alloc); 
}