¿Fallo con *dato++ ?

Started by Drumpi, January 07, 2011, 05:42:10 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

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).
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)

Drumpi

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.
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)

SplinterGU

#2
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)++
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

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.
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)

Windgate

Nada más ver el título del post ya te iba a decir que uses paréntesis 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