2013-06-25 35 views
0

我正在向矢量內的boost::tuple指針內的向量內賦值uint8_t。分配本身似乎工作正常,但數據似乎在分配後立即釋放,因爲它往往會被其他數據覆蓋。std :: vector中的數據損壞 - 大概是由錯誤的賦值造成的

我想packet* a = new packet;應分配一個新的packet及以下.push_back(a)應該複製的指針和指向同一個值 - 顯然我錯了。 我希望有人看到我的錯誤;將不勝感激任何幫助。

typedef boost::tuple<uint8_t, uint16_t, std::vector<uint8_t> > packet; 

static void assignValueToMember(uint8_t& member){ 
    member = 1; 
} 
static void assignValueToMember(uint16_t& member){ 
    member = 2; 
} 

static void assignValueToMember(std::vector<uint8_t> member){ 
    int maxIndex = 10; 
    for (int i = 0; i < maxIndex; i++){ 
     uint8_t a; 
     assignValueToMember(a); 
     member.push_back(a); 
    } 
} 

static void assignValueToMember(std::vector<packet*>& member){ 

    int maxIndex = 20; 

    for (int i = 0; i < maxIndex; i++){ 
     packet* a = new packet; 
     assignValueToMember(boost::get<0>(*a)); 
     assignValueToMember(boost::get<1>(*a)); 
     assignValueToMember(boost::get<2>(*a)); 

     member.push_back(a); 
    } 
} 

void Base::test(){ 
    std::vector<packet*> a; 
    assignValueToMember(a); 

    packet* b = a.front(); 
    std::vector<unsigned char> c = boost::get<2>(*b); 

    std::cout << c.front(); 
} 
+1

assignValueToMember的矢量版本不採用引用的向量。 –

+0

'std :: vector '會更好,因爲'std :: vector >'。 – Casey

+2

std :: vector 會更好,因爲std :: vector (或者,如果包由於某些原因確實無法在內存中移動,std :: deque )。 – Nevin

回答

4

static void assignValueToMember(std::vector<uint8_t> member)您正在傳遞此向量的副本而不是參考。

+0

非常感謝你......我沒有看到,甚至在切割我的代碼時也是如此。謝謝。 – dos

相關問題