elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con ficheros :/
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con ficheros :/  (Leído 2,151 veces)
snowspring

Desconectado Desconectado

Mensajes: 12


Ver Perfil
problema con ficheros :/
« en: 4 Junio 2018, 14:50 pm »

Hola buenas, me hayo haciendo un pequeño programa en C, en el cual una de las cosas que debe de hacer es crear una lista enlazada con los valores que le pasamos desde un fichero de texto, el problema es que al ejecutarlo me da "Violacion de segmento('core' generado)", y no encuentro el error.
El codigo que tengo es el siguiente:
Código
  1. int cargarListaEnlazadaTexto (ListaEnlazadaRef raiz, char *nombreFichero){
  2.  
  3. int cont=0;
  4. tipoNodoRef aux, nuevo;
  5. FILE *fid;
  6. tipoInfoRef info;
  7.  
  8. if ((fid=fopen(nombreFichero, "r"))==NULL){
  9. #ifdef DEBUG
  10. fprintf(stderr, "Error: abriendo fichero\n");
  11. #endif
  12. return -1;
  13. }else{
  14. if(estaVacia(*raiz)){
  15. crearVacia(raiz);
  16. fscanf(fid, "%d ", info);
  17. insertarNodoComienzo(raiz, info);
  18. }
  19. else if((fscanf(fid, "%d ", info))!=EOF){
  20. while(fscanf(fid, "%d ", info)!=EOF){
  21. aux=*raiz;
  22. insertarOrdenada(&aux, info);
  23. }
  24.  
  25. }else{
  26. fclose(fid);
  27. #ifdef DEBUG
  28. fprintf(stderr, "Error: leyendo fichero\n");
  29. #endif
  30. return -2;
  31. }
  32.  
  33. }
  34. return 0;
  35. }

**Todas las funciones a las que llamo dentro de la funcion funcionan a la perfeccion.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: problema con ficheros :/
« Respuesta #1 en: 4 Junio 2018, 17:33 pm »

Te lías con los punteros:
seguro que estaVacia espera un puntero;
aux=*raiz; debería ser aux=raiz;
insertarOrdenada ¿espera un puntero a puntero?


En línea

snowspring

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: problema con ficheros :/
« Respuesta #2 en: 4 Junio 2018, 19:10 pm »

Te lías con los punteros:
seguro que estaVacia espera un puntero;
aux=*raiz; debería ser aux=raiz;
insertarOrdenada ¿espera un puntero a puntero?
Lo de los punteros esta bien, igualmente lo he revisado y al cambiarlo a como me has dicho me dan errorres :/
Igualmente voy a dejar aqui los prototipos de las funciones que uso y los typedefs:
Código
  1. typedef int tipoInfo;
  2.  
  3. typedef tipoInfo *tipoInfoRef;
  4.  
  5.  
  6.  
  7.  
  8. typedef struct tipoNodo {
  9. tipoInfo info;
  10. struct tipoNodo * sig;
  11. } tipoNodo;
  12. typedef tipoNodo *tipoNodoRef;
  13.  
  14.  
  15. typedef tipoNodo * ListaEnlazada;
  16. typedef ListaEnlazada *ListaEnlazadaRef;
  17.  
  18. /*Prototipos*/
  19.  
  20. int crearVacia(ListaEnlazadaRef raiz);
  21. int estaVacia(ListaEnlazada raiz);
  22. int insertarNodoComienzo(ListaEnlazadaRef raiz, tipoInfoRef info);
  23. int insertarOrdenada(ListaEnlazadaRef raiz, tipoInfoRef info);
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: problema con ficheros :/
« Respuesta #3 en: 4 Junio 2018, 20:15 pm »

¿Podrías pasar todo el código para entender que hace el conjunto?
En línea

snowspring

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: problema con ficheros :/
« Respuesta #4 en: 4 Junio 2018, 20:29 pm »

¿Podrías pasar todo el código para entender que hace el conjunto?
Código
  1. [code=c]int crearVacia(ListaEnlazadaRef raiz){
  2. *raiz=NULL; //tipoNodo** <> ListaEnlazadaRef
  3. return 0; //tipoNodo*  <> ListaEnlazada
  4. }
  5.  
  6.  
  7. int estaVacia(ListaEnlazada raiz) {
  8. return (raiz==NULL);
  9.  
  10. }
  11.  
  12. int insertarNodoComienzo(ListaEnlazadaRef raiz, tipoInfoRef info) {
  13. return insertarAntesDeNodo(raiz,NULL,info);
  14. }
  15.  
  16. int insertarAntesDeNodo(ListaEnlazadaRef raiz, tipoNodoRef pos, tipoInfoRef info){
  17. tipoNodoRef nuevo, anterior;
  18.  
  19. if((nuevo=creaNodo(info))==NULL){
  20. #ifdef DEBUG
  21. fprintf(stderr, "Error: creando nodo\n");
  22. #endif
  23. return -1;
  24. }else{
  25. if(estaVacia(*raiz) || pos==NULL || pos==*raiz){
  26. nuevo->sig=*raiz;
  27. *raiz=nuevo;
  28. }else{
  29. anterior=*raiz; //ant=*raiz
  30. while(anterior!=NULL && anterior->sig!=pos){
  31. anterior=anterior->sig;
  32.  
  33. }
  34.  
  35. if(anterior!=NULL){
  36. nuevo->sig=pos;
  37. anterior->sig=nuevo;
  38.  
  39. }else{
  40. free(nuevo);
  41. #ifdef DEBUG
  42. fprintf(stderr, "Error: posicion inexistente\n");
  43. #endif
  44. return -2;
  45. }
  46. }
  47. return 0;
  48. }
  49. }
  50.  
  51. int insertarOrdenada(ListaEnlazadaRef raiz, tipoInfoRef info){
  52. tipoNodoRef ant;
  53.  
  54. if(estaVacia(*raiz) || *info < (*raiz)->info)
  55. return insertarNodoComienzo(raiz,info);
  56. else{
  57. ant=*raiz;
  58. while(ant->sig!=NULL && ant->sig->info < *info){
  59. ant = ant->sig;
  60. }
  61. return insertarDespuesDeNodo(raiz, ant, info);
  62. }
  63. }
  64.  
  65.    int cargarListaEnlazadaTexto (ListaEnlazadaRef raiz, char *nombreFichero){
  66.  
  67.     int cont=0;
  68.     tipoNodoRef aux, nuevo;
  69.     FILE *fid;
  70.     tipoInfoRef info;
  71.  
  72.     if ((fid=fopen(nombreFichero, "r"))==NULL){
  73.    #ifdef DEBUG
  74.     fprintf(stderr, "Error: abriendo fichero\n");
  75.    #endif
  76.     return -1;
  77.     }else{
  78.     if(estaVacia(*raiz)){
  79.     crearVacia(raiz);
  80.     fscanf(fid, "%d ", info);
  81.     insertarNodoComienzo(raiz, info);
  82.     }
  83.     else if((fscanf(fid, "%d ", info))!=EOF){
  84.     while(fscanf(fid, "%d ", info)!=EOF){
  85.     aux=*raiz;
  86.     insertarOrdenada(&aux, info);
  87.     }
  88.  
  89.     }else{
  90.     fclose(fid);
  91.    #ifdef DEBUG
  92.     fprintf(stderr, "Error: leyendo fichero\n");
  93.    #endif
  94.     return -2;
  95.     }
  96.  
  97.     }
  98.     return 0;
  99.    }
[/code]

Y bueno aqui estaria la llamada en el main:
Código
  1. [code=c]printf("Introduce el nombre de la lista de la cual quieres coger los datos: ");
  2.     scanf("%s%*c", nombreFichero);
  3.     printf("Guardando fichero en lista: %d\n", cargarListaEnlazadaTexto(&raiz, nombreFichero));
  4.  
[/code]

(espero no haberme liado al copiar nada que no tenga que ver ni nada por el estilo :/ )
« Última modificación: 4 Junio 2018, 21:37 pm por snowspring » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con envio de ficheros
Java
Debci 4 2,520 Último mensaje 26 Agosto 2009, 10:03 am
por Debci
problema con programa de ficheros en c
Programación C/C++
Quake-man 1 2,365 Último mensaje 10 Septiembre 2010, 18:39 pm
por nicolas_cof
iDStore lista ficheros y directorios ocultos de ficheros .DS_Store
Nivel Web
MichBukana 0 3,266 Último mensaje 29 Agosto 2013, 09:21 am
por MichBukana
Problema con ficheros
Programación C/C++
DeIMachine 2 1,358 Último mensaje 12 Diciembre 2015, 23:06 pm
por DeIMachine
PROBLEMA CON FICHEROS :V
Programación C/C++
CHETO1234 3 1,317 Último mensaje 17 Enero 2016, 23:11 pm
por lfgmespino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines