I have spent a lot of time to search reason of errors.
Below is a piece of my c++ program which is using vector to store data. I have seen that when vector
increase self size, then all references are change. So save references to push_back()
object by back()
object is stupid and does not make sense.
class Test{
public :
int wiek;
};
int main(int argc, char **argv)
{
std::vector<Test> v;
std::vector<Test*> vv;
for (int i = 0; i < 12; i++) {
Test t;
t.wiek = 10;
v.push_back(t);
vv.push_back(&v.back());
}
Test& m = v.back();
for (int i = 0; i < 24; i++) {
Test t;
t.wiek = 123;
v.push_back(t);
vv.push_back(&v.back());
}
for (int i = 0; i < 36; i++) {
std::cout<<"vv.at(i)->wiek : "<<vv.at(i)->wiek<<"\n";
}
// vv.at(i)->wiek : 1619638984
// vv.at(i)->wiek : 167838876
// vv.at(i)->wiek : 167838896
// vv.at(i)->wiek : 167838900
// vv.at(i)->wiek : 167839152
// vv.at(i)->wiek : 167839156
// vv.at(i)->wiek : 167839160
// vv.at(i)->wiek : 167839164
// vv.at(i)->wiek : 167838872
// vv.at(i)->wiek : 167838876
// vv.at(i)->wiek : 167838880
// vv.at(i)->wiek : 167838884
// vv.at(i)->wiek : 167838888
// vv.at(i)->wiek : 167838892
// vv.at(i)->wiek : 167838896
// vv.at(i)->wiek : 167838900
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// vv.at(i)->wiek : 123
// ...
//
return 1;
}
Do I have right?