В программе для имитации логических элементов я переключился с использования массивов
node N[1000];
на векторы
vector<node> N;
И моя программа работала отлично до использования векторов, но теперь он выводит неверные результаты, поэтому я попытался отладить и обнаружил, что ошибка возникает здесь:
node* Simulator::FindNode(string h)
{
int i;
for(i = 0; i < NNodes; i++)
{
if (N[i].getname() == h)
{
return &N[i];
}
}
node n ;
N.push_back(n);
N[NNodes].setname(h);
NNodes++;
return &N[NNodes-1]; //why?because of NNodes++
}
// ...
node* inp1;
node* inp2;
node* out;
string NodeName;
inp_file >> NodeName;
inp1 = FindNode(NodeName);
s1 = inp1;
inp_file >> NodeName;
inp2 = FindNode(NodeName); //inp1 is destroyed here
inp_file >> NodeName;
out = FindNode(NodeName); //inp2 and inp1 are destroyed here
При первом вызове FindNode
первый указатель inp1 указывает на правильное место, которое & N [0]
.
При повторном вызове FindNode
1-й указатель inp1 указывает на мусор, а второй указатель inp2 указывает на правильное место & N [1]
.
При вызове FindNode
в третий раз оба 1-й и 2-й указатели ( inp1
, inp2
) указывают на мусор! И третий указатель указывает на правильное место.
Почему это произошло?
Как работает вектор, когда я вставляю в них элементы, и какие указатели я должен использовать, чтобы указывать на элементы векторов?