Bueno, tengo un puntero de strings y al acceder a el varias veces me aparece esto:
Assertion failed: < string alloated && code > =0, file strings.c line 264. contacte con el equipo de soporte de la aplicacion.
tambien me borra los elementos del puntero, solo deja el primero y ya.
un bug de bennu, o cometi un supererrordeprogramacion.
Se nota que es un problema interno del modulo y que se tratá internamente, lo curioso es que Splinter tuvierá este tipo de mensajes en Bennu
"contacte con el equipo de soporte de la aplicacion".
Curioso :)
codigo completo...
deberias contactar al equipo de soporte de la aplicacion...
Quote from: SplinterGU on July 03, 2010, 11:41:16 AM
deberias contactar al equipo de soporte de la aplicacion...
:D
Buenas , como siempre se dice sin el codigo no se puede ver donde esta el error...
Aun asi ,si que e visto ese mensaje alguna vez, y el problema no es de Bennu, sino que se esta intentando hacer algo raro con la cadena de texto, yo creo , seguramente tienes algo mal,no te lo puedo asegurar al 100%,pero si que creo que tienes algun gazapo en el codigo que te lanza ese error....
Si publicas el codigo te lo hecho un vistazo.
Quote from: DjSonyk on July 03, 2010, 03:34:00 PM
Buenas , como siempre se dice sin el codigo no se puede ver donde esta el error...
Aun asi ,si que e visto ese mensaje alguna vez, y el problema no es de Bennu, sino que se esta intentando hacer algo raro con la cadena de texto, yo creo , seguramente tienes algo mal,no te lo puedo asegurar al 100%,pero si que creo que tienes algun gazapo en el codigo que te lanza ese error....
Si publicas el codigo te lo hecho un vistazo.
asi es, pero antes de dar un diagnostico prefiero tener codigo
for(contador_lineas=0;contador_lineas<cantidad_lineas;contador_lineas++)
posicion_tecleo_x=0;
posicion_tecleo_y=contador_lineas*(fuente_escribir.alto+espacio_vertical);
cadena_teclear=lineas_texto[contador_lineas];
longitud_cadena=len(cadena_teclear);
for(i=0;i<longitud_cadena;i++)
grafico_letra=cadena_teclear-31;
teclear(0,fuente_escribir.file,graph,grafico_letra,posicion_tecleo_x,posicion_tecleo_y);
posicion_tecleo_x+=fuente_escribir.ancho_letras[cadena_teclear-32];
frame(demora);
end
end
lo que hace esto es escribir un mensaje con graficos. La variable grafico letra indica el grafico dentro del fpg que tiene las letras, y la funcion teclear escribe esa letra. Crei que el error era por que utilizo un caracter para hacer una resta, pero incluso he utilizado variables alternas para hacer esta operacion y me sigue saliendo lo mismo. Hasta ensaye quitar la resta y nada. Que pasa, ¿no se supone que los caracteres tambien son bytes?.
lord103, ese codigo no sirve para diagnosticar, siempre es importantisimo las declaraciones de las variables, los modulos que usas y que otras cosas se hacen, tenes que pasar un codigo completo compilable.
Ok. Aqui dejo el codigo
edito: corregi el grafico de la fuente, lo vuelvo a subir.
El error esta en esa en este say().
[code language="bennu"]
say("termine");
for(contador_lineas=0;contador_lineas<cantidad_lineas;contador_lineas++)
say(lineas_texto[contador_lineas]); // ESTO ESTA MAL
say(contador_lineas); // Con esto te vale
end[/code]
Ya que estas intentando escribir String con un puntero ,de ahi que te de el error,por lo demas parece que va bien ,quitando que tienes que mejorar el espacio ,se interpone O de "Hola" con M de "Mundo"...
Tambien aconsejo de poner mas comentarios ,ya que os aclarareis mejor y se puede interpretar mejor el codigo por los demas...
Saludos.
¿lineas_texto está declarado como array de POINTER o como string?
Si está declarado como array de POINTER lo único que debería suceder es que se muestren los valores de las direcciones de memoria.
PD: No he mirado el código aún, acabo de ver el hilo.
Esta declarado como un string pointer...
Entonces sí, es un array de POINTER:
say( * ( lineas_texto [ contador_lineas ] ) );
Solucinaría el problema, ya que mostraría el dato apuntado por ese POINTER.
no, no, esta bien que ponga lineas_texto[ indice ], el problema es que no podes acceder a un indice que previamente no le hayas hecho una asignacion de string, ni hablar que tambien sea a un area que este alocada. Y las asignaciones a esa string deben ser directamente sobre el puntero, no se puede usar para acceder a otra area, por ejemplo otro array de strings.
usar "string *" es algo muy delicado, no sugiero usarlo si no sabe lo que se hace.
en la linea 188 puse cadena_teclear=lineas_texto[contador_lineas]; y aun asi sigue habiendo error. Lo que me parece extraño es que funcionara cuando hay solo una linea de texto pero cuando hay mas no.
al final tuve que quitar los punteros y realizar todo con un solo string.
no uses punteros a strings, es un tema complicado de explicar que ya lo explique en el foro.
saludos.
Dímelo a mi, que empecé un editor de textos con las funciones que gestionan la lista de líneas de texto, y ni aun usando nodos conteninedo una string y un puntero conseguí aclararme ^^U
(Debo repasar todo el tema de nomenclatura de punteros :P).