Hola CalgaryCorpus.
Gracias por tu comentario, lo de liberar lArr lo sabía, pero como recien estoy haciendo la aplicación, prefiero probar el código y una vez que funciona, agrego lo que falta.
Respecto a:
Cita: Si tu arreglo mantiene punteros a Investigadores, el metodo deberia recibir eso, punteros. Si no recibe punteros, entonces recibira una copia de los objetos que te pasan, tal como estas declarando el metodo, y al asignarle a tu arreglo mediante
La cabecera de la función tendría que ser:
void ListaInvestigadores::insertar(Investigador *i)
y lo demás tendría que dejarlo igual, no?
Código:
void ListaInvestigadores::insertar(Investigador *i)
{
Investigador **lArrNuevo;
lArrNuevo = new Investigador * [s+1];
if(lArrNuevo == 0)
cout << "Ha sucedido un problema al crear el puntero lArrNuevo";
else
{
for(int j=0; j < s; j++)
lArrNuevo[j] = lArr[j];
lArrNuevo[s] = &i;
cout << lArrNuevo[s]->toString();
s++; // Incrementamos en 1 el numero de Investigadores
delete[] lArr;
lArr = lArrNuevo;
}
}
podrás ver que he agregado el delete[] lArr.
Este código funciona si esta en el menú principal, pero ahora lo he encapsulado dentro de un procedimiento para tener todo ordenado y falla, me sale una ventana de ensamblador, lo que me imagino que es lo que tu dices, algo en la memoria falla.
Gracias
-------------------------------------------------------------
Ya que ahora lo que le paso es un puntero:
lArrNuevo[s] = &i;
Debería pasar a:
lArrNuevo[s] = i;
Ya que se va a hacer una copia binaria de i, la cual contiene la dirección de memoria dónde se encuentra el objeto investigador y esa direccions e asignara a la posicion s de iArrNuevo ¿Esto sería correcto?
Ahora tengo el procedimiento nuevo:
Código:
void altaInvestigador(ListaInvestigadores l)
{
Investigador *i;
i->set();
l.insertar(i);
}
El problema es que ahora el metodo set falla...