Ver Mensaje Individual
  #3 (permalink)  
Antiguo 31/03/2010, 11:49
eduardor2k
 
Fecha de Ingreso: enero-2007
Mensajes: 8
Antigüedad: 17 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Duda con punteros

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...

Última edición por eduardor2k; 31/03/2010 a las 11:57