Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas Con Vector.

Iniciado por nsL, 15 de Abril de 2005, 06:27:51 PM

« anterior - próximo »

nsL

 Tienes razon, se me estaba olvidando liberar la memoria del vector, solo liberaba su contenido. :P

Citar
1) Lo que se me ocurre es que como es mem dinámica no situe los elementos del vector en direcciones continuas de memoria. Prueba a usar frameList.at(i) en vez de frameList.

Eso seria para referenciar a un frame, pero es qu a mi el error me da nada mas cargar el segundo, no al acceder a el :(

si hago esto por ejemplo:

void CSprite::addframe(char *Path)
{
listaFram *Aux = (listaFram *)malloc(sizeof(listaFram));
frameList.push_back(*Aux);
               printf("%d",frameList.size());
frameList[++total].frame = IMG_Load(Path);
}


en el archivo de salida stdout q se crea con SDL se escribe 1112. los 3 primeros 1 son referentes a el fondo, puntero y el primer frame del boton, y el 2 es cuando cargo el 2º frame del sprite del boton, con lo cual si agrega bien al vector, lo que pasa que:

frameList[++total].frame = IMG_Load(Path);

no rula, no se si por esa sentencia o porque se peta antes. Y el archivo si esta, de echo probe a cargar primero el segundo frame (el que nunca carga) y en segundo lugar el frame que iba bien, y me pasa lo mismo, el que cargue en 2º lugar es el que no va.

Ya me canse de vector :P si sabes/eis alguna otra forma de almacenarlos dinamicamente os lo agradezco.
Aunq ahora q lo pienso podria hacerlo estatico pues sere yo quien los cargue en cada momento y se cuantos frames son realmente, aunq yo lo hacia dinamico por abstraerme de andar modificando los indices cada vez, pero en fin...

Gracias una vez mas por la ayuda y Saludos!  B)

Yo no muero hasta la muerte -

Warchief

 Lista dinámica enlaza. Pon un puntero dentro de las estructura que sea a una estructura del mismo tipo. En el objeto guarda solo el puntero al primero (recomendablemente al ultimo también) de esa estructura, y cada uno que apunte al siguiente. Cuando uno apunta a NULL es el último.  

nsL

 asi es como lo tenia antes :P

y iba bien la verdad, no se pa q meti las narices con vector....
Lo q pasa es que me daban problemas de memoria, q solo me cargaban pocos frames por culpa de las maskaras , q yo creo q son excesivamente grandes...

Y como no hice copia de seguridad de los metodos con listas enlazadas me voy a cortar las venas :P

Saludos!  (ole)  
Yo no muero hasta la muerte -

ProD

 Buenas.. a mi se me ocurre esto:

[CODE]

void CSprite::addframe(char *Path)
{
 listaFram newFrame = {NULL, NULL};

 // Cargamos el frame
 newFrame.frame = IMG_Load(Path);
 assert(newFrame.frame != NULL);

 // Lo guardamos
 frameList.push_back(newFrame);
}

Prueba esto a ver si rula... aunque te cargue los frames del 0 en adelante. Si funciona luego
puedes adaptarlo para que cargue a partir del 1. Saludos.
as ideas son capitales que sólo ganan intereses entre las manos del talento

Sacrifai

 ¿Olle y porque no te montas tu arreglo dinamico?Seguro que así funciona.

nsL

 ProD esta tarde pruebo eso.
Por cierto, la assert me la tengo q crear o viene con alguna libreria?, es que en mi libro se la crea el tio.

Sacrifai, a que te rfieres con arreglo dinamico :P

Gracias y Saludos!  B)  
Yo no muero hasta la muerte -

nsL

 ya lo probe y no va  (ole)

Me pasa como siempre, si relleno el campo frame antes de hacer el push_back no se carga el frame, tengo q ponerlo asi pa q se vea:


listaFram newFrame = {NULL, NULL};
frameList.push_back(newFrame);
frameList[++total].frame = IMG_Load(Path);


Sino na de na, y si lo pongo asi sigue sin cargarme 2 frames.
A mi ya me hace gracia la cosa, porq es algo tan raro q ni vosotros q teneis mas experiencia entendeis, porq deberia ir bien... en fin Salu2

Por cierto, el assert q se supone q dice el tipo de error o que? porq lo ponga o no me pasa lo mismo y no veo mensaje alguno  :blink:  
Yo no muero hasta la muerte -

samsaga2

 Me he leido ahora el problema bien (no como antes con la chorrada que dije que no funciona). El error que te esta dando es de corrupcion de memoria, es decir, el programa intenta acceder a una zona de memoria que no le toca (por explicarlo de alguna forma). Eso quiere decir que el error no debe estar necesariamente en la linia en la que peta si no que puede deberse a alguna gestion erronea de memoria que hagas con anterioridad. Lo que puedes hacer es usar el debugger y aplicaciones como Valgrid para intentar encontrar donde esta realmente el fallo.

Sacrifai

 Pues que te montes un vector propio usando un array dinamico(punteros, vamos). Cada vez que reescales el array llamas a la función que tengas para asignar la memoria.

Warchief

Cita de: "nsL"Por cierto, el assert q se supone q dice el tipo de error o que? porq lo ponga o no me pasa lo mismo y no veo mensaje alguno  :blink:
http://www.opengroup.org/onlinepubs/007908...h/assert.h.html


#include <assert.h>

main() {
 bool miCondicion = false;
 assert(miCondicion);
}


Assert:
- Si la condición es verdad no pasa nada
- Si la condición es mentira saca un error irrecuperable diciendo qué condición falla.
(es bueno para índices erróneos, punteros nulos, etc.)

En el ejemplo de código saldría un mensaje diciendo que ha fallado el programa porque no se cumple "miCondicion".






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.