2015-03-03 64 views
0

我正在處理boost::interprocess::shared_memory_object,我試圖實現的是這樣的。提升共享內存對象中的指針

我定義了我自己的類,它被稱爲SharedMemory,其中有一個方法 ,它叫做CreateSharedMemory(),它創建一個內存塊。我需要在這個內存塊中保留三個數組Foo a1[SIZE], Foo a2[SIZE]Foo a3[SIZE],這樣我就可以一直向它們寫入數據。 Foo是我自己定義的類。要訪問這三個數組,我需要在我的過程中獲得他們的地址。所以我通過三個指針Foo *p1, *p2, *p3這個方法來記錄他們的地址。在這種方法中一切都很順利,但一旦它退出這種方法,p1, p2, p3指向錯誤的地址。誰能幫忙?

// Foo.h 
class Foo 
{ 
    double f[MAX_SIZE]; 
    char c[MAX_SIZE]; 
} 

// SharedMemory.cpp 
void SharedMemory::CreateSharedMemory(Foo *p1, Foo *p2, Foo *p3) 
{ 
    boost::interprocess::shared_memory_object shm 
     (boost::interprocess::create_only 
     ,"foo"    //name 
     ,boost::interprocess::read_write 
    ); 
    shm.truncate(blockSize); 

    //Map the whole shared memory in this process 
    boost::interprocess::mapped_region region(shm, boost::interprocess::read_write); 
    //Write all the memory to 0 
    memset(region.get_address(), 0, region.get_size()); 

    // assign address 
    p1 = static_cast<Foo *>(region.get_address()); 
    p2 = static_cast<Foo *>(region.get_address() + blockSize/3); 
    p3 = static_cast<Foo *>(region.get_address() + 2 * blockSize/3); 

    // p1, p2, p3 point to the correct address here 
} 

// p1, p2, p3 point to the wrong address once it steps out CreateSharedMemory() 

回答

0

您必須傳遞對Foo指針的引用。像:

void SharedMemory::CreateSharedMemory(Foo* & p1, Foo* & p2, Foo* &p3) 
+0

你是對的!謝謝! – Chitanda 2015-03-03 05:10:44