• Sábado 9 de Noviembre de 2024, 03:37

Autor Tema:  Gestion Memoria Con Archivos Y Cadenas  (Leído 1863 veces)

elbaulico

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Gestion Memoria Con Archivos Y Cadenas
« en: Viernes 23 de Enero de 2004, 13:02 »
0
Vamos a ver si alguien me puede ayudar. Tengo un archivo con numerosos documentos y el programa que quiero hacer es que me lea las palabras de esos documentos y las trate(cambie esa palabra por otra). El problema que tengo es que cuando tengo tantos documentos y tantas palabras me falta memoria o por lo menos me sale un error en la ejecucion. Me gustaria saber si alguien tiene alguna idea de como hacer que pueda leer una palabra, la trate y la escriba en otro archivo. Una solucion es declarar una variable global "char cadena[20]", pero asi no me funciona por lo de la memoria. Como estoy leyendo de un archivo de texto no se cuantos caracteres tiene cada palabra, y ahi me he quedado. El problema lo tengo al gestionar las palabras, por lo demas todo lo tengo hecho

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #1 en: Viernes 23 de Enero de 2004, 14:22 »
0
Mmmmm, lo primero que se me ocurre es recomendarte el uso de las funciones para reservar y liberar memoria dinámicamente (free, malloc, calloc...), así no hace falta ni variables globales, ni tamaño fijo para el array de char. Lo has probado ya??
Core Dumped
zirrus.es

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #2 en: Viernes 23 de Enero de 2004, 14:23 »
0
Hola:

  Si estas leyendo de un archivo en formato texto, para leer cada palabra puedes utilizar:
 fscanf(fichero, "%s", variable)
Así te irá almacenando cada palabra del fichero en la variable indicada sin necesidad de saber por cuántos caracteres está formada.

  No sé si es esto lo que preguntabas, pero es lo que me ha parecido por tu última línea.

  Espero que te sirva.

Saludos

elbaulico

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #3 en: Viernes 23 de Enero de 2004, 19:00 »
0
El problema que tengo es que cuando leo muchas palabras y las trato me da el siguiente error:

"Thread stopped archivo.exe: Fault: access violations at 0x407db9: write of address 0x7663657c"

Esto por que puede ser? Es por que no reservo memoria o es por otra cosa que no contemplo?

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #4 en: Viernes 23 de Enero de 2004, 19:45 »
0
No termino de ver claro lo que quieres hacer, a que te refieres cuando dices lo de "tratar" la palabra? como accedes al fichero? Cada palabra la quieres almacenar aparte?
Core Dumped
zirrus.es

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #5 en: Viernes 23 de Enero de 2004, 19:51 »
0
Podrias explicarte mejor, la verdaad que escribiste una ensalda y no se entiende bien parece...
QliX=D! - From the top of Tsunami

elbaulico

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #6 en: Viernes 23 de Enero de 2004, 20:09 »
0
Perdonad si no me he explicado bien. Mi programa lee un fichero de texto que contiene un puñao de documentos. Lo que hago es coger palabra a palabra y las "trato", es decir, lo que hago es lematizar esa palabra (cojo solo el lexema de esa palabra), y cuando la lematizo la paso a un fichero de texto que solo contiene las palabras lematizadas.

Ahora lo que me pasa es que lo ejecuto y me hace las primeras palabras pero se para en una y me da el error que he dixo antes de "Thread Stopped".

Bien, ahora no se si es por falta de memoria o por que es. Yo tengo una variable global llamada cadena y hago esto:
char *cadena;
....
cadena = (char *)malloc(sizeof(char ));
....
fscanf(in, "%s", cadena);
....
free(cadena)

Estoy desesperaooooooooooo

chuidiang

  • Miembro MUY activo
  • ***
  • Mensajes: 123
  • Nacionalidad: es
    • Ver Perfil
    • http://www.chuidiang.com
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #7 en: Lunes 26 de Enero de 2004, 09:00 »
0
Con malloc(sizeof(char)) solo reservas espacio para un caracter. Cuando leas una palabra te saldrás del espacio reservado y estarás machacando memoria de otras cosas. El fallo puede ser cualquiera en cualquier momento.

El proceso que sigues es correcto, salvo por el tamaño. Debes hacer el malloc un poco más grande. Si no hay palabras más grandes de 100 caracteres, puedes hacer

malloc (100 * sizeof(char));

Se bueno.

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Gestion Memoria Con Archivos Y Cadenas
« Respuesta #8 en: Lunes 26 de Enero de 2004, 09:44 »
0
Hola:

  Si existe una longitud máxima para las palabras, sería mejor que utilizases
char cadena[maximo];
en lugar de:
char *cadena;
en resumidas cuentas es lo mismo, pero mi experiencia me dice que de la segunda forma te trae menos problemas, así que si es posible es mejor utilizarla antes que la primera. Además así puedes pasar del malloc y del free, puesto que directamente al declararla se reserva espacio para contener cualquier palabra cuya longitud no supere la máxima.

Saludos.