的元件考慮後續的代碼:C++指針MemoryBlock中
byte *memblock = new byte[500];
byte **ptr_to_memblock = &memblock;
memblock += 40;
ptr_to_memblock = &memblock;
ptr_to_memblock將始終在上述例子中保持相同的值。 我想這是來自memblock的地址(帶或不帶偏移量)將始終返回連續內存塊的地址的事實。
問題是我想要實現某種DynamicHeap類,您可以在其中分配任意大小的內存並以任意順序釋放它。該類使用一個內存塊(如上面的memblock),一旦內存塊滿了,它將被一個更大的內存塊替換。問題是我需要跟蹤所有使用DynamicHeap類的內存的對象,因爲一旦我分配一個更大的塊來替換它與舊的塊,我需要重新分配我的程序使用的所有指針。我想通過指向我的程序想要從DynamicHeap類獲取內存時返回的內存來完成此操作。不幸的是,我返回的內存指針總是指向內部使用的內存塊的指針。
有什麼辦法可以獲得連續內存塊中特定地址的指針嗎?
任何答案表示讚賞。
[編輯]也許這個例子有助於我們理解我的問題是什麼:
//byte = typedef char
byte *memblock = new byte[sizeof(Object) * 2];
Object *myObject1 = new((Object*)memblock) Object;
Object *myObject2 = new((Object*)memblock + sizeof(Object)) Object;
Object **ptr_to_myObject1 = &myObject1;
Object **ptr_to_myObject2 = &myObject2; //will be the same as ptr_to_myObject1
byte *memblock2 = new byte[sizeof(Object) * 3];
memcpy(memblock2,memblock,sizeof(Object) *2);
*ptr_to_myObject1 = (Object*)memblock2;
*ptr_to_myObject2 = (Object*)memblock2 + sizeof(Object); //Won't work.
delete[] memblock;
memblock = NULL;
我只能重新分配指針myObject1(因爲它是一樣的地址memblock),但我不能重新分配指向myObject2的指針(因爲& myObject2與& myObject1相同(與& memblock相同))。
你的意思是你想在刪除* memblock指向那個區域後使用相同的內存區域? – 2012-08-04 11:06:02
這不是真的,因爲&myObject2與&myObject1相同。不知道如何更清楚地說出來。 – jahhaj 2012-08-04 13:27:53