Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Drumpi on January 07, 2011, 05:42:10 PM

Title: ¿Fallo con *dato++ ?
Post by: Drumpi on January 07, 2011, 05:42:10 PM
Hola a todos:

Pues nada, me ocurre algo muy raro. Resulta que estoy leyendo un fichero de configuración en modo texto (con lo sencillo que sería hacerlo binario, pero quiero que en caso de fallo se pueda crear/modificar a mano) y tengo una serie de funciones para leer palabras o números.

Una de ellas lee palabras (o tokens) completas:

function leer_token (string lt_linea, int pointer lt_pos)

Uso lt_pos como indicador del último caracter de la string que se ha leido, pero parece que la línea:

*lt_pos++;

No incrementa el valor contenido en el puntero, vale 0 las dos o tres primeras veces, y luego 262146.
No sé si es error mío de sintaxis o de Bennu. Por si acaso, adjunto código para su testeo. He probado con la r181 y la r201 con el mismo crash de memoria (no he podido probarlo con la r203 porque no hay versión RAR subida).
Title: Re: ¿Fallo con *dato++ ?
Post by: Drumpi on January 07, 2011, 05:52:15 PM
De momento lo he solucionado con (*lt_pos)++
No sé si es que lo otro está mal escrito y lo que hace es leer el contenido y hacer un post-incremento. Lo que quería hacer era incrementar el valor contenido en el puntero en una unidad.
Title: Re: ¿Fallo con *dato++ ?
Post by: SplinterGU on January 07, 2011, 05:55:54 PM
Quote from: Drumpi on January 07, 2011, 05:42:10 PM
Hola a todos:

Pues nada, me ocurre algo muy raro. Resulta que estoy leyendo un fichero de configuración en modo texto (con lo sencillo que sería hacerlo binario, pero quiero que en caso de fallo se pueda crear/modificar a mano) y tengo una serie de funciones para leer palabras o números.

Una de ellas lee palabras (o tokens) completas:

function leer_token (string lt_linea, int pointer lt_pos)

Uso lt_pos como indicador del último caracter de la string que se ha leido, pero parece que la línea:

*lt_pos++;

No incrementa el valor contenido en el puntero, vale 0 las dos o tres primeras veces, y luego 262146.
No sé si es error mío de sintaxis o de Bennu. Por si acaso, adjunto código para su testeo. He probado con la r181 y la r201 con el mismo crash de memoria (no he podido probarlo con la r203 porque no hay versión RAR subida).

eso no es un fallo, si te miras la tabla de precedencias de operadores (tanto en bennugd como en C) comprenderas que el ++ en ese caso no afecta al contenido sino al puntero...

que dice *ptr++ ?

dice, puntero se increnta en 1, pero luego de su uso... o sea

*ptr

y luego

ptr++

en realidad se ejecuta asi:

(ptr++)

*ptr

pero lo que pasa es que como el ++ es postincremento, el valor de ptr que se usa para obtener el contenido es el anterior al incremento.

---

para incrementar el contenido, es correcto lo que has hecho (*ptr)++
Title: Re: ¿Fallo con *dato++ ?
Post by: Drumpi on January 07, 2011, 06:26:11 PM
Okis, entonces es un fallo mío de sintaxis, no problemo, ya todo funciona correctamente, ya puedo establecer el tamaño de la ventana usando este fichero de configuración, a por el resto.
Title: Re: ¿Fallo con *dato++ ?
Post by: Windgate on January 07, 2011, 07:12:18 PM
Nada más ver el título del post ya te iba a decir que uses paréntesis xD