Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Punteros que se vuelven locos.

Estas en el tema de Punteros que se vuelven locos. en el foro de C/C++ en Foros del Web. Antes que cualquier otra cosa, gracias a quien me pueda ayudar. Este es mi problema. Estoy realizando una tarea que precisa el uso de Listas ...
  #1 (permalink)  
Antiguo 12/09/2007, 08:20
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Punteros que se vuelven locos.

Antes que cualquier otra cosa, gracias a quien me pueda ayudar.

Este es mi problema. Estoy realizando una tarea que precisa el uso de Listas Enlazadas usando C en Linux. El enunciado pide crear un corrector ortográfico en inglés (para facilitar el trabajo con los caracteres), de tal modo que:

* Si es una palabra reconocida, entonces dejarla tal cual es
* Si está mal escrita, corregirla
* Si no se reconoce, dejarla en mayúsculas.

Hasta ahí logre hacerlo, hice las listas enlazadas, y no exento de complicaciones con las funciones de cadenas de ANSI C, tuve que implementar la Copia de cadenas y Concatenación a mano. Todo lo que tengo hecho, probado aisladamente, funciona impecable.

La otra complicación del enunciado es que debe reconocer palabras con variantes, por ejemplo finalizadas en -ed, -ing, -s, -es.

Los errores comienzan a aparecer a la hora de ejecutar una búsqueda y comparar la Palabra buscada con la palabra actual de la lista Concatenada con la terminación (mi algoritmo de comparación). Por alguna extraña razón se cae en cualquier punto de la iteración a través de la búsqueda, aunque en mi PC usando Kubuntu 7.04 se me cae en un punto, y en los laboratorios de prueba se cae en otro punto. Cuando digo se me cae, significa SEGMENTATION FAULT.

Cuando hago la misma búsqueda sin comprobar las otras terminaciones no provoca fallos, pero hasta ahí no estaría completa la tarea.

--
NO pido que me hagan la tarea, ya tengo el 90% hecho, me falta solo esto que realmente no puedo determinar, según yo mi algoritmo está bueno, pero se vuelve loco.

Los printf que le agregue a la función Concatenar eran para "depurar" (no se depurar), y llegué a la conclusión de que sin motivo se cae en el printf de la salida de Concatenar, pero solo en cierto punto del recorrido, y distinto en cada máquina donde pruebo.
--
Acá esta el código fuente (no lo pude postear porque eran varios archivos)
TAR.GZ: http://www.mediafire.com/?fiwjmij2gl9
ZIP: http://www.mediafire.com/?c9f4t1g2gti

Para quien me quiera ayudar, le doy la facilidad de poner atención en la función Buscar (listas.c) y Corregir (listas.c). Para compilarlo hice que funcionara con el clásico:

./configure
make

Aunque también incluye un proyecto para KDevelop. Para que menciono Dev-C++ en windows , ahí se me cae mucho antes .

La llamada al programa se hace así:
Código:
/ruta/al/ejecutable/corrector data/testfile.dat data/checked.dat
De todos modos, si no alcanzo a hacer esto para la fecha de entrega, igualmente me gustaría saber donde está el error, para no volver a cometerlo.

De antemano, muchas gracias.
__________________
Blog | Tecnosquad
  #2 (permalink)  
Antiguo 12/09/2007, 12:06
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Punteros que se vuelven locos.

Pues. Si tienes Linux(kubuntu como dijiste) tienes suerte. Digo, tambien se puede hacer wn windows pero es diferente.

Tu problema es obviamente con algun(os) puntero(s). Precisamente esse el comportamiento impredictible de los punteros cuando uno no tiene cuidado con ellos.

Bueno, en linux instala gdb. Si, vas a depurar.

Despues compila tu programa con las opciones -g3 -ggdb
Luego, has una lista mental o escrita de los punteros sospechosos o incluso de variables comunes que de repente fallan por alguna razon desconozida.

Despues ejecuta gdb asi:
gdb mi_programa

Te saldra una linea de comandos alterna.

Ahi escribe help para que veas todo las herramientas que tienes a disposicion para depurar.

Hay una que se llama watchpoints

Eso sirve para que cuando una variable puntero o lo que sea cambie de un valor a otro, el depurador para el programa y te avisa que instruccion fue la que cambio el valor del puntero o la variable.

Generalmente en un problema tuyo te puede salir que un puntero fuera de direccion quiso cambiar algun valro y pues modifico datos que estaban fuera del alcanze permitido. Te daras cuenta facilmente.

gdb mi_prgrama
>watch main.cpp:13(linea 13, donde se supone esta la variable sospechosa)
>run

Con un poco de practica te volveras bueno depurando con este poderoso depurador. Y creeeme, puedes hacer muchisisisimas mas cosas..


Saludos
  #3 (permalink)  
Antiguo 12/09/2007, 13:56
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Re: Punteros que se vuelven locos.

gracias, había leído sobre gdb, y probe algo por ahí.

el problema en mi caso, es que la función en problemas es una iteración que llama a otra, y no una, sino varias veces, entoces seguirle la traza step por step e interpretar la infromación no será muy fácil.

Quizás tenga que entregarlo como está :S, la única posibilidad que tengo para hacer esto es que me den más tiempo. De ser así tal vez haga más preguntas, sino pero gracias por todo.
__________________
Blog | Tecnosquad
  #4 (permalink)  
Antiguo 13/09/2007, 07:34
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: Punteros que se vuelven locos.

Con el gdb no tienes que ejecutarlo paso a paso, simplemente espera a que te de el error y escribes bt en la linea de comandos de gdb para que te haga el back trace y te miestre la línea en la que se generó el error y otras cosas más, pero en principio eso es lo que te interesa o puedes usar el valgrind, es excelente para esos casos, aunque un poco más complicado de usar que el gdb.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 21/09/2007, 20:44
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Re: Punteros que se vuelven locos.

disculpa la tardía respuesta, pero estuve offline.

gracias, voy a ver que tal me va, aunque ya se acerca la fecha de entrega, igualmente lo revisaré, porque no es el único problema con cadenas de texto que he tenido.
__________________
Blog | Tecnosquad
  #6 (permalink)  
Antiguo 22/09/2007, 01:03
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Punteros que se vuelven locos.

Cita:
Iniciado por Instru Ver Mensaje
Pues. Si tienes Linux(kubuntu como dijiste) tienes suerte. Digo, tambien se puede hacer wn windows pero es diferente.
¿El WinDbg es dificil de usar ahora?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 22/09/2007, 09:49
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Punteros que se vuelven locos.

Cita:
Iniciado por Eternal Idol Ver Mensaje
¿El WinDbg es dificil de usar ahora?
Realmente no lo se, tu dime.
  #8 (permalink)  
Antiguo 22/09/2007, 10:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Punteros que se vuelven locos.

Cita:
Iniciado por Instru Ver Mensaje
Realmente no lo se, tu dime.
Probalo, no sabes lo que te perdes
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 22/09/2007, 10:56
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Punteros que se vuelven locos.

Cita:
Iniciado por Eternal Idol Ver Mensaje
Probalo, no sabes lo que te perdes
Lo haria si tubiera windows. Pero ya sabes, me quede con mi Linux.
  #10 (permalink)  
Antiguo 22/09/2007, 10:58
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Punteros que se vuelven locos.

Cita:
Iniciado por Instru Ver Mensaje
Lo haria si tubiera windows. Pero ya sabes, me quede con mi Linux.
Claro, me imagino.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:56.