elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Liberación de memoria dinámica.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Liberación de memoria dinámica.  (Leído 1,191 veces)
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
[C++] Liberación de memoria dinámica.
« en: 18 Noviembre 2015, 02:32 am »

Vean, estaba haciendo una especie de "juego", y a la hora de programar la rutina de las balas me ha surgido un problema, podemos disparar las veces que queramos y no pasará nada, pero en el momento cuando la última bala llega al tope, el programa deja de funcionar.

El error está (creo) en la liberación de la memoria dinámica, no sé qué estoy haciendo mal. Verán, esta es la parte:

Código
  1.        for(it = balas.begin(); it != balas.end(); ++it) {
  2.            (*it)->borrar_bala((*it)->GetX(),(*it)->GetY());
  3.            if(!(*it)->rng_fuera()) {
  4.                (*it)->mod_pos_bala((*it)->GetY());
  5.                (*it)->pintar_bala();
  6.            }
  7.            else {
  8.                delete (*it);
  9.                balas.erase(it);
  10.            }
  11.        }
  12.  

La función rng_fuera() retorna un valor booleano, retorna true si la bala ha llegado al tope, es decir, cuando y = 0. Y false en caso contrario.

Entonces yo, como se muestra arriba, borro de la pantalla la posición actual de la bala, si ha llegado al tope, pues libero la memoria y borro ese elemento del vector, en caso contrario modifico la posición actual de la bala a la nueva posición y la pinto. Pero algo sucede y no puedo encontrar el error.

Si necesitan el código completo para entenderlo mejor, pídanmelo y lo publico en los comentarios. :)


En línea

furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: [C++] Liberación de memoria dinámica.
« Respuesta #1 en: 18 Noviembre 2015, 18:54 pm »

Estás liberando un puntero y luego un puntero doble.


En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [C++] Liberación de memoria dinámica.
« Respuesta #2 en: 18 Noviembre 2015, 19:52 pm »

It es un iterador de un vector.

Ya corregí el error, estaba usando un vector y en realidad tenía que usar una lista. Estaba buscando diferencias y resulta que por estar todo el tiempo generando nuevas balas y eliminando encontré esto:

Lists are faster when you regularly need to insert elements in between two other elements, or delete elements from such positions though. Insertions and erasures are cheap no matter where in the list they occur. Iterators remain valid even when you add or remove elements from the list.

Así que simplemente cambié de un vector a una lista y funcionó. Escribo esto por si a alguien se le presenta lo mismo.

Pero gracias por responder igual. :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Asignacion Dinamica Memoria
Programación C/C++
charmedever 5 3,437 Último mensaje 21 Octubre 2011, 05:25 am
por charmedever
Memoria dinámica
Programación C/C++
eleon 6 4,816 Último mensaje 24 Enero 2012, 22:17 pm
por Eternal Idol
Memoria dinamica matriz
Programación C/C++
programacion_c 1 2,821 Último mensaje 25 Abril 2012, 00:23 am
por david_BS
Memoria dinamica? « 1 2 »
Programación C/C++
vangodp 11 5,303 Último mensaje 30 Abril 2014, 12:35 pm
por vangodp
Memoría dinámica
Programación C/C++
Developer Diego 4 2,466 Último mensaje 20 Mayo 2014, 23:10 pm
por Developer Diego
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines