Pues que la funcion extraer me extraiga solo el objeto que yo quiero,ahora me extrae los dos y yo solo quiero que me extraiga uno,la primera funcion extraer debe extraer solo el primer objeto y la otra funcion extraer solo extrae el otro objeto,ahora mismo la funcion me extrae los dos de golpe.
Sigo sin entender bien lo que querés hacer mirando el código. La función extraer reduce el indizado usable aunque las entidades sigan vivas en memoria luego de extraer de una lista. Tenes una sola lista global donde metes "objeto" tanto como "jugador" con funciones diferentes.
Cuidado con los comentarios de "creo jugador" "creo objeto", en realidad estás "registrando" un elemento que ya existe por si mismo en la memoria.
Algo que veo raro es que no estés usando referencias para pasar como argumento para la lista, estás haciendo por valor, pero es fundamental recordar que los identificadores de elementos de stack se hacen inválidos al completar la ejecución de una función. Cuando tu función insertar añadir o como sea que se llame se completa, todo el stack se destruye, por lo tanto no tiene sentido almacenar en un array global identificadores que ya fueron destruidos **. Mejor usar punteros de jugador, de objeto y en todo caso considerar el uso de memoria de heap (memoria dinámica) etc.
** Imaginate si no fuera así y por ejemplo tuvieras una función como
- Code: Select all
void mi_funcion()
{
int indice;
//no hago más que crear una variable local indice y luego acabo la función
}
ahora desde otra parte del código llamo a "mi_funcion()" 100000 de veces, quiere decir que cada vez que llamo a mi_funcion() estoy creando una variable int indice; que nunca se libera automáticamente al completar la función, hasta que se acaba la memoria de la máquina y el sistema operativo deja de funcionar. Esto no sucede, al completar la función "mi_funcion()" el entero "indice" se destruye automáticamente. Leo bastantes artículos que critican negativamente el uso de C porque no tiene recolector de basura (es cierto), que debés ocuparte de la memoria constantemente y causa errores, bueno en este caso es automático porque son variables alojadas en stack y es automático, es lenguaje C, y como dijo dennis ritchie, "cuando hicimos este lenguaje de programación eran muy pocos los que sabían programar computadoras y todos eran expertos", esos tiempos pasaron ahora nosotros hacemos sufrir a la máquina (me incluyo aquí) y a veces no nos damos cuenta porque son muy potentes
