我正在向矢量內的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();
}
assignValueToMember的矢量版本不採用引用的向量。 –
'std :: vector'會更好,因爲'std :: vector >'。 –
Casey
std :: vector會更好,因爲std :: vector (或者,如果包由於某些原因確實無法在內存中移動,std :: deque )。 –
Nevin