[C con Clase] comportamiento extraño lista generica
Manuel Lopez Blasi
vladisblood en yahoo.com.ar
Jue Sep 25 22:58:42 CEST 2008
Buenas Gente, tengo un problema con lo siguiente:
Estoy intentado implementar una lista cuyos nodos estan definidos asi:
typedef struct _nodo * ptrANodo;
typedef ptrANodo Lista;
typedef struct _nodo {
void *datos;
ptrANodo siguiente;
} stNodo;
es decir que yo puedo insertar "cualquier" tipo de dato en ella. Ahora bien, quiero insertarle un struct que tengo definido, digamos por ejemplo
typedef struct _stEstructura{
tipo datosVarios
}stEstructura;
entonces llamo a mi funcion:
asi: Insertar(&lista,&estructura,funcionComparacion,1);
mi Insertar esta definido asi:
void Insertar(Lista *lista, void* dato,int (*funcionComp)(void*,void*,int),int criterioOrden)
ptrANodo nuevo = NULL, anterior = NULL , aux = *lista;
stTest *dato1s;
stTest *dNodo;
nuevo = (ptrANodo)malloc(sizeof(stNodo));
nuevo->datos = (void*)dato;
if(ListaVacia(*lista) || funcionComp( (*lista)->datos,nuevo->datos,criterioOrden)){
nuevo->siguiente = *lista;
*lista = nuevo;
}
else {
anterior = aux;
while(anterior->siguiente && !funcionComp( anterior->siguiente->datos,nuevo->datos,criterioOrden) )
anterior = anterior->siguiente;
nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;
}
}
lo extraño es que antes de entrar en insertar() la lista tiene ciertos valores como datos, apenas entro a insertar() esta cambia a los valores que presisamente le estoy mandando casteados a void* , es decir mi estructura casteada a void*
Alguien tiene alguna idea??? ya le he dado mil vueltas pero no encuentro solucion.
Saludos, Muchas Gracias
Más información sobre la lista de distribución Cconclase