Autor Tema: Uso de punteros como array dinámico para novatos.  (Leído 10453 veces)

DjSonyk

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #15 en: Diciembre 03, 2009, 12:34:20 am »
¿Eso quiere decir que la carga de los datos a la memoria dinamica la hago bien?
En lo otro supones mal ^^ ,con una variable privada hago; encontrado=celdas[contador];say(encontrado); :(

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #16 en: Diciembre 03, 2009, 12:39:00 am »
A ver... no me lei todo, disculpas, pero voy a comentar algunas cosas que lei...

1) los realloc son costosisimos en Windows, en unix son una seda... la cosa es que la cagada de windows, para hacer realloc, siempre asigna un nuevo area de memoria... en los unix normalmente expande el area ya asignada, con lo que no asigna un nuevo espacio ni copia la data vieja sobre la nueva...

2) Como que el realloc se come las ultimas posiciones??? eso no puede ser... o quizas no te entendi que queres decir...

3) En bennu no hay garbage... si alocas, tenes que desalocar... cuidado!

4) si haces un alloc no podes grabar eso con las save comunes, no podes guardar dinamicos con save, fwrite o fread... porque lo que estas guardando/recuperando son punteros... tenes que usar el modo extendido de fwrite/fread... busca las funciones en este foro, esta el help descripto...

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #17 en: Diciembre 03, 2009, 03:07:46 am »
Gran aporte en el punto 4 Splinter, ahora entiendo, si haces vectores a través de un puntero no guardas el vector, guardas el puntero.

Qué peculiar es Bennu, es peculiar, como nosotros xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DjSonyk

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #18 en: Diciembre 03, 2009, 01:54:35 pm »
Si eso es lo que creo que hacia guardar punteros...... estado buscando no encuentro nada Splinter al menos el estendido de Fwrite/Fread ...
Bueno que se le va hacer....

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #19 en: Diciembre 03, 2009, 02:38:12 pm »
DjSonyk: Haz lo que te dije: del puntero lo guardas en una variable, y luego de esa al fichero... o usa las funciones extendidas, pero esas no las conozco. Vamos, que en la carga deberías haber hecho algo así:

TYPE Celda
   INT X,Y,Grafico;
END
Celda POINTER Celdas;
abrir fichero

Celdas=Alloc(3072*sizeof(Celdas));
id_fich=FOPEN("dat.dat",O_READ);
FOR (contador10=0;contador10<=3072;contador10++)
   Fread(id_fich, Celda);
   celdas[contador10]=celda;

END
FCLOSE(id_fich);

Y no se si tendrías que ir campo por campo, pero no debería ser necesario.

Splinter: 2) me refiero a que si haces un realloc con menos memoria que la que tenías reservada antes, lo lógico es liberar las últimas posiciones, perdiéndose esos datos. Si luego Windows no es lógico, no es problema mio ;D

PD: el foro no me deja responder a este hilo con la respuesta rápida, que raro.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DjSonyk

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #20 en: Diciembre 03, 2009, 03:41:06 pm »
¡¡¡Drumpi muchas gracias!!! ,lo haré pero ya mas adelante,sigo con el proyecto,que ademas devo acabar uno que le pormeti a Delso y seguir con mi Remake de Army.....ah he intentar portar el ejemplo de lista para Wind...Pero primero quiero dejar el editor sobre todo para los que estais en el concurso,os centreis en el codigo y no donde teneis que poner cada cosa dentro del nivel....aun asi cierto es que & devuelve un puntero y * devuelve el contenido del puntero al menos en C.

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #21 en: Diciembre 03, 2009, 03:58:57 pm »
mi dolor de cabeza... arrays dinámicos  :D

karma ++, :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #22 en: Diciembre 04, 2009, 02:17:28 am »
Gran aporte en el punto 4 Splinter, ahora entiendo, si haces vectores a través de un puntero no guardas el vector, guardas el puntero.

Qué peculiar es Bennu, es peculiar, como nosotros xD

no es nada peculiar de bennu, es algo logico... como lo puedo explicar sin re-explicar lo obvio? cuando uno crea un puntero, un puntero es un indicador a una direccion, ningun lenguaje por medio de un puntero, no puede saber cuanta memoria tiene el area de memoria que apunta el puntero, ademas el puntero no esta asociado a ningun area de memoria... es simplemente un puntero, un señalador que puede ser cambiado su valor, sin que por eso se libre memoria ni se afecte la memoria alocado... no se como explicarlo de otra forma...

DjSonyk: Haz lo que te dije: del puntero lo guardas en una variable, y luego de esa al fichero... o usa las funciones extendidas, pero esas no las conozco. Vamos, que en la carga deberías haber hecho algo así:

TYPE Celda
   INT X,Y,Grafico;
END
Celda POINTER Celdas;
abrir fichero

Celdas=Alloc(3072*sizeof(Celdas));
id_fich=FOPEN("dat.dat",O_READ);
FOR (contador10=0;contador10<=3072;contador10++)
   Fread(id_fich, Celda);
   celdas[contador10]=celda;

END
FCLOSE(id_fich);

Y no se si tendrías que ir campo por campo, pero no debería ser necesario.

Splinter: 2) me refiero a que si haces un realloc con menos memoria que la que tenías reservada antes, lo lógico es liberar las últimas posiciones, perdiéndose esos datos. Si luego Windows no es lógico, no es problema mio ;D

PD: el foro no me deja responder a este hilo con la respuesta rápida, que raro.

ese ejemplo tampoco va a funcionar, estas usando punteros.

que el realloc achique la memoria y elimine los datos del final, no es ningun defecto ni problema...

estado buscando no encuentro nada Splinter al menos el estendido de Fwrite/Fread ...

http://forum.bennugd.org/index.php?topic=102.msg6312#msg6312

http://forum.bennugd.org/index.php?topic=102.msg6314#msg6314

:P :P :P
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #23 en: Diciembre 04, 2009, 02:58:30 am »
Cierto, confundí tipo con variable ^^U

TYPE Celda
   INT X,Y,Grafico;
END
celda dato_celda;
Celda POINTER Celdas;
abrir fichero

Celdas=Alloc(3072*sizeof(Celda));
id_fich=FOPEN("dat.dat",O_READ);
FOR (contador10=0;contador10<=3072;contador10++)
   Fread(id_fich, dato_celda);
   celdas[contador10]=dato_celda;
END
FCLOSE(id_fich);

Y yo aun despierto ;D
PD: sigo sin poder responder a ESTE HILO con el cuadro de respuesta rápida.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Sandman

  • Sr. Member
  • ****
  • Mensajes: 298
  • Karma: 48
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #24 en: Diciembre 04, 2009, 06:26:32 am »
No extra variable needed:
Código: [Seleccionar]
TYPE Celda
   INT X,Y,Grafico;
END
Celda POINTER Celdas;

//abrir fichero
Celdas=Alloc(3072*sizeof(Celda));
id_fich=FOPEN("dat.dat",O_READ);
FOR (contador10=0;contador10<=3072;contador10++)
   Fread(id_fich, celdas[contador10]);
END
FCLOSE(id_fich);
-- Sandman

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #25 en: Diciembre 04, 2009, 01:22:48 pm »
oh, yes, you are right... the compiler know sizeof "celdas[]"... ;)

In theory this must works... if don't work then we have a problem...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Sandman

  • Sr. Member
  • ****
  • Mensajes: 298
  • Karma: 48
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #26 en: Diciembre 04, 2009, 01:33:51 pm »
Actually, there's an error. There are 3072 Celda's allocated, but 3073 are loaded. So, one of them needs to be fixed.
-- Sandman

Windgate

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #27 en: Diciembre 04, 2009, 01:40:06 pm »
Oh, I remember that arrays in Bennu has celdas from 0 to N, this is:

int my_array [ 1024 ]

Has elements from 0 to 1024, so 1025 elements.

Maybe with arrays is the same... ??? Although it is weird, yes...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12749
  • Karma: 375
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #28 en: Diciembre 04, 2009, 01:58:18 pm »
Actually, there's an error. There are 3072 Celda's allocated, but 3073 are loaded. So, one of them needs to be fixed.

contador10  <"="  3072

3073!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: Uso de punteros como array dinámico para novatos.
« Respuesta #29 en: Diciembre 04, 2009, 05:42:14 pm »