Limpiar imagen de la RAM psp [C]

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

jdelmejor
Desarrollador
Desarrollador
Mensajes: 63
Registrado: 04 Abr 2010, 15:02

Re: Limpiar imagen de la RAM psp [C]

Mensaje por jdelmejor »

m0skit0 escribió:Nop :lol: Eso te daría un obvio error de compilación sobre que has declarado la misma variable 2 veces. Yo digo esto

Código: Seleccionar todo

int main()
{
    int imgmenu = NULL;
    initGraphics();
    imgmenu = loadImage("Imagenes/Menumodv2.png");
    blitAlphaImageToScreen(0 ,0 ,480 , 272, imgmenu, 0, 0);
    flipScreen();
    freeImage(imgmenu);
    imgmenu = NULL;
    return 0;
}


Ok gracias, solo resaltar que al compilar sale lo siguiente en la linea de " int imgmenu = NULL; " :
Warning: Initialization Makes Integer From Pointer Without A Cast.
Y en la de: " imgmenu = loadImage("Imagenes/Menumodv2.png"); " :
Warning: Assignment makes integer from pointer without a cast.
Pero no pasa nada ¿verdad? ;)

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Limpiar imagen de la RAM psp [C]

Mensaje por m0skit0 »

Ya me parecía a mí rara la librería ésta :lol: La imagen no es un entero. Es un puntero (no sé de qué tipo). Consulta la documentación de la librería.

Lo siento, pero no cuentes conmigo para más ayuda cuando ni siquiera te lees la documentación de lo que programas...
Imagen

jdelmejor
Desarrollador
Desarrollador
Mensajes: 63
Registrado: 04 Abr 2010, 15:02

Re: Limpiar imagen de la RAM psp [C]

Mensaje por jdelmejor »

m0skit0 escribió:Ya me parecía a mí rara la librería ésta :lol: La imagen no es un entero. Es un puntero (no sé de qué tipo). Consulta la documentación de la librería.

Lo siento, pero no cuentes conmigo para más ayuda cuando ni siquiera te lees la documentación de lo que programas...


Ya, esque yo sabia que se podian mostrar de dos formas y cogí esa porque se parecia mas a LUA que utilicé anteriormente, pero tambien y (mas correctamente creo) que se hace así:

Código: Seleccionar todo

Image * imgmenu;

Pero esque en este caso no sabría si se le podría poner como antes:

Código: Seleccionar todo

Image * imgmenu = NULL;
imgmenu = loadImage("Imagenes/Menumodv2.png");
blitAlphaImageToScreen(0 ,0 ,480 , 272, imgmenu, 0, 0);
flipScreen();
freeImage(imgmenu); //Limpia imagen de la RAM//
imgmenu = NULL;

Ademas, segun pspgorrister da igual si luego al final pones imgmenu = NULL; (Despues de liberarla), asi que creo que me conformaré con freeImage o no se, cito de su comentario:
pspgorrister escribió:NUNCA pongas a NULL un puntero en C que apunte a algo que tengas pensado liberar. Si lo haces así, pierdes la dirección de memoria y ya no tienes forma de liberar la RAM usada porque no sabes dónde está, ¿a dónde apuntaba el puntero?. Esto produce las temidas memory leaks que son los mayores quebraderos de cabeza de los novatos (y no tan novatos :-D )

Si has liberado la memoria, da igual poner ese puntero a NULL o dejarlo como está porque va a ocupar lo mismo, es decir lo que ocupa un int. El puntero sólo ocupa un int lo que ocupa realmente es "a lo que apunta". Espero haberme explicado.

¿?

Avatar de Usuario
~Rdavid~
Experto
Experto
Mensajes: 965
Registrado: 12 Nov 2009, 17:29
Ubicación: Costa Rica

Re: Limpiar imagen de la RAM psp [C]

Mensaje por ~Rdavid~ »

Código: Seleccionar todo

Image * imgmenu;


Que yo sepa eso no se puede hacer en C :?
Imagen

jdelmejor
Desarrollador
Desarrollador
Mensajes: 63
Registrado: 04 Abr 2010, 15:02

Re: Limpiar imagen de la RAM psp [C]

Mensaje por jdelmejor »

~Rdavid~ escribió:

Código: Seleccionar todo

Image * imgmenu;


Que yo sepa eso no se puede hacer en C :?


Pues en PSP los ejemplos que vi son asi, en C, y a mi me van sin problemas xD.
Es muy parecido el: Image * imgmenu; que int imgmenu; pero el int devuelve un nº entero y creo que eso no interesa o algo, apenas tengo tiempo para seguir aprendiendo C ya que los maestros parece ser que no saben lo que significa la palabra VA-CA-CIO-NES :ko: ...

Avatar de Usuario
~Rdavid~
Experto
Experto
Mensajes: 965
Registrado: 12 Nov 2009, 17:29
Ubicación: Costa Rica

Re: Limpiar imagen de la RAM psp [C]

Mensaje por ~Rdavid~ »

jesus el mejor escribió:
~Rdavid~ escribió:

Código: Seleccionar todo

Image * imgmenu;


Que yo sepa eso no se puede hacer en C :?


Pues en PSP los ejemplos que vi son asi, en C, y a mi me van sin problemas xD.
Es muy parecido el: Image * imgmenu; que int imgmenu; pero el int devuelve un nº entero y creo que eso no interesa o algo, apenas tengo tiempo para seguir aprendiendo C ya que los maestros parece ser que no saben lo que significa la palabra VA-CA-CIO-NES :ko: ...

Creo que son cosas totalmente diferentes, con int imgmenu; defines una variable de tipo entero, con Image * imgmenu; sinceramente no se que haces, nunca he visto eso en C.

Yo te recomiendo que te pases por los cursos de m0skit0, te ayudaran mucho en todo esto :oki:
Imagen

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Limpiar imagen de la RAM psp [C]

Mensaje por m0skit0 »

jesus el mejor escribió:Ya, esque yo sabia que se podian mostrar de dos formas

Pues lo siento pero te equivocas. Y C no es LUA.

jesus el mejor escribió:Pero esque en este caso no sabría si se le podría poner como antes

Claro, es así.

jesus el mejor escribió:Ademas, segun pspgorrister da igual si luego al final pones imgmenu = NULL; (Despues de liberarla), asi que creo que me conformaré con freeImage o no se, cito de su comentario

Lo que pasa es que no le has entendido. Él a lo que se refiere es que no le des NULL antes de liberarlo, y lo dice bien claro

pspgorrister escribió:NUNCA pongas a NULL un puntero en C que apunte a algo que tengas pensado liberar.

Una vez lo liberes, es mejor darle un valor ya conocido, de lo contrario se quedará con basura y no sabrás distinguir si ya está liberado o no (repetición de lo dicho anteriormente). De todas formas, haz como te venga en gana, que ya ves qué resultados obtienes.

pspgorrister escribió:Si has liberado la memoria, da igual poner ese puntero a NULL o dejarlo como está porque va a ocupar lo mismo, es decir lo que ocupa un int.

Esto es correcto, salvo la parte de "da igual poner ese puntero a NULL". No da igual porque en caso de querer comprobar más adelante si hemos o no liberado dicha memoria, no sabríamos distinguirlo. Sin embargo, si tenemos el puntero a NULL sabemos que está liberado y si no que está ocupado (3ª repetición de lo mismo).

~Rdavid~ escribió:Que yo sepa eso no se puede hacer en C :?

Sí se puede. Imagen es un tipo de dato definido por la librería, y por tanto imgmenu es un puntero a ese tipo de dato definido. ¿Te acuerdas de los structs? Pues también puedes tener punteros a structs ;)

De todas formas, jesus el mejor no deberías aprender a programar en la PSP, y sobre todo deberías entender qué estás haciendo, aparte de primero intentar aprender el lenguaje antes de tirarte a programar lo primero que se te pasa por la cabeza sin ni siquiera saber las bases del lenguaje que estás usando. Y bueno, tú sabrás a quién hacer caso, a mí o a pspgorrister (que sinceramente es la primera vez que oigo tal nick)
Imagen

Avatar de Usuario
~Rdavid~
Experto
Experto
Mensajes: 965
Registrado: 12 Nov 2009, 17:29
Ubicación: Costa Rica

Re: Limpiar imagen de la RAM psp [C]

Mensaje por ~Rdavid~ »

m0skit0 escribió:
Sí se puede. Imagen es un tipo de dato definido por la librería, y por tanto imgmenu es un puntero a ese tipo de dato definido. ¿Te acuerdas de los structs? Pues también puedes tener punteros a structs ;)


Si, eso fue lo primero que imagine pero creí que uno debía hacer algo como struct Imagen * imgmenu pero ya veo que se puede de esa forma también :oki:
Imagen

jdelmejor
Desarrollador
Desarrollador
Mensajes: 63
Registrado: 04 Abr 2010, 15:02

Re: Limpiar imagen de la RAM psp [C]

Mensaje por jdelmejor »

OK, si tu lo dices me fio xD :D
Al final quedaria asi xD:

Código: Seleccionar todo

int main()
{
Image * imgmenu;
blitAlphaImageToScreen(0 ,0 ,480 , 272, imgmenu, 0, 0);
flipScreen();
freeImage(imgmenu); //Limpia imagen de la RAM//
imgmenu = NULL
return 0;
}


Salu2 :oki:

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Limpiar imagen de la RAM psp [C]

Mensaje por m0skit0 »

~Rdavid~ escribió:Si, eso fue lo primero que imagine pero creí que uno debía hacer algo como struct Imagen * imgmenu pero ya veo que se puede de esa forma también :oki:

En realidad no hace falta que sea un struct. Si haces un typedef defines un nuevo tipo con el nombre que te dé la gana, y no te hace falta ponerle struct delante.

jesus el mejor escribió:OK, si tu lo dices me fio

¿Cómo que me fío? Te digo la razón 3 veces y me dices "me fío"... :tongue:

jesus el mejor escribió:Al final quedaria asi

Sip.
Imagen

Responder