En un programa para simular puertas lógicas me pasaran de utilizar matrices¿La inserción de elementos en un vector daña un puntero del vector?
node N[1000];
a vectores
vector<node> N;
Y mi programa funcionaba perfectamente antes de usar vectores pero ahora que imprime resultados erróneos, por lo que trataron de depuración y descubrí que el insecto pasa aquí:
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
al llamar FindNode
para la primera vez, la primera i puntero np1 apunta al lugar correcto que es &N[0]
.
Al llamar al FindNode
por segunda vez, el 1er puntero inp1 apunta a basura y el segundo puntero inp2 apunta al lugar correcto &N[1]
.
Al llamar al FindNode
por tercera vez, tanto el 1º como el 2º punteros (inp1
, inp2
) apuntan a la basura. Y el 3er puntero señala el lugar correcto.
¿Por qué sucedería eso?
¿Cómo funciona el vector cuando les inserto elementos y qué tipo de punteros debo usar para señalar los elementos de vectores?
he formateado su puesto. También cambié tu código, * por favor * pon espacios entre las cosas. Hacer: 'for (i = 0; i> NodeName;' en lugar de 'inp_file >> NodeName;' , es mucho más legible –
GManNickG
Me gustaría sugerir que marque la respuesta de GMan como aceptada. Es el más completo aquí. –
Gracias a todos los que respondieron especialmente a GMan y Steven Sudit. Ahora tengo demasiados para estudiar y modificar. – Ahmed