2016-09-23 15 views
1

私のコードでは、heap_ptrの古い値へのポインタを返し、heap_ptrをbytes_allocの量だけ移動するように求められます。私は既にvoid *heap_ptrとしてheap_ptrを宣言しており、heap_ptrには8192バイトを指定するためにheap_ptr = mmap(NULL, 2*4096, ...)と宣言しています。私の問題は、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ポインタ" - いいえ、特に何も設定していないので、特に何もない一時ポインタです。 – immibis

答えて

2

ポインタ算術移動を指摘されているオブジェクトのサイズによって。そう式中:

(char *)heap_ptr + bytes_alloc 

ポインタがcharが1バイトであると定義されているので、バイトの数を言うと同じであり、その多くchar Sによって調整されます。

bytes_allocのタイプ自体は計算には影響しません。

void *にキャストする必要はありません。暗黙の変換があります。コードを読みやすくするために、不要なキャストを避けることをお勧めします。

-1

あなたがheap_ptrの前でbytes_allocバイトのポインタを返すようにしたい場合は、

void *heap_alloc(int bytes_alloc, void *heap_ptr) { 
    return (void *)((char *)heap_ptr + bytes_alloc); 
} 
関連する問題