C/Visual C - Error en codigo de arboles (segmentation fault)

 
Vista:

Error en codigo de arboles (segmentation fault)

Publicado por Dark-ArTaX (2 intervenciones) el 11/07/2006 03:51:47
Necesito ayuda nose que tiene mal el codigo ni porque me esta dando es error cuando le doy para que cargue el archivo me dice segmentation fault? que s este error? que puedo hacer para resolver el problema? les agradezco toda su ayuda
#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <stdlib.h>

/****************************************************Estructura del arbol**************************************************/

typedef struct info{

char palabra[20];

int veces;

}info;

typedef struct hoja{

info data;

struct hoja *hijo_d;

struct hoja *hijo_i;

}arbol;

/******************************************Funciones para manejo de Arboles************************************************/

arbol *nueva_hoja(info data)

{

arbol *aux = malloc (sizeof(arbol));

aux->data = data;

aux->hijo_d = NULL;

aux->hijo_i = NULL;

return(aux);

}


arbol *agregar (arbol *raiz, info data){

if (raiz == NULL)

{

raiz = nueva_hoja(data);

return (raiz);

}

else

if ((strcmp(raiz->data.palabra,data.palabra)) == 0)

{

raiz->data.veces = raiz->data.veces + data.veces;

return(raiz);

}

else

if ((strcmp(raiz->data.palabra,data.palabra))>0)

return (agregar(raiz->hijo_i,data));

else

if ((strcmp(raiz->data.palabra,data.palabra))<0)

return (agregar(raiz->hijo_d,data));

}


arbol *buscar(arbol *raiz, char busca[])

{

if (!raiz) return(NULL);

else

if ((strcmp(raiz->data.palabra,busca)) == 0)

return(raiz);

else

if ((strcmp(raiz->data.palabra,busca)) > 0)

return(buscar(raiz->hijo_i,busca));

else

if ((strcmp(raiz->data.palabra,busca)) < 0)

return(buscar(raiz->hijo_d,busca));

}


void freetree(arbol *raiz)

{

if (raiz != NULL)

{

freetree(raiz->hijo_i);

freetree(raiz->hijo_d);

free(raiz);

}

}


void delete_word(arbol **raiz, char deleting[])

{

if(!(*raiz))

printf("La palabra %s no se encuentra\n",deleting);

else

if((strcmp((*raiz)->data.palabra,deleting))<0)

delete_word(&(*raiz)->hijo_i, deleting);

else

if((strcmp((*raiz)->data.palabra,deleting))<0)

delete_word(&(*raiz)->hijo_i, deleting);

else

{

arbol *aux=(*raiz);

if (aux->hijo_i == NULL) (*raiz) = aux->hijo_d;

else if (aux->hijo_d == NULL) (*raiz) = aux->hijo_i;

else

{

arbol *aux2, *aux3;

aux3 = aux;

aux2 = aux->hijo_i;

while (aux2->hijo_d)

{

aux3 = aux2;

aux2 = aux2->hijo_d;

}

aux3->data = aux2->data;

if (aux3 == aux)

aux3->hijo_i = aux2->hijo_i;

else aux3->hijo_d = aux2->hijo_d;

aux = aux2;

}

free(aux);

}

}



/**************************************************************************************************************************/

arbol *leer(arbol *raiz, char ruta[])

{

char lectura[256];

char *cargar;

info data;

FILE *prueba = NULL;

int i=0, cont=0;

prueba = fopen(prueba, "rt");

while (!feof(prueba))

{

fgets(lectura,256,prueba);

while (lectura[i] != '\r')

{

if (lectura[i]!= ' ')

{

if (lectura[i] >= 'a' && lectura[i] <= 'Z')

strcat(cargar,lectura[i]);

cont = cont + 1;

}

else

if (lectura[i] == ' ' && cont >=2)

{

strcpy(data.palabra,cargar);

data.veces = 1;

raiz = agregar(raiz,data);

cont = 0;

strcpy(cargar,' ');

}



}



}

return(raiz);

}


void imprime(arbol *raiz)

{

if(raiz)

{

imprime(raiz->hijo_i);

printf("Palabra: %s \n",raiz->data.palabra);

printf("Veces repetidas: %d \n",raiz->data.veces);

imprime(raiz->hijo_d);

}

}


/***********************************Programa Principal************************/

int main(){

FILE *prueba = NULL;

char cadena[256];

char ruta[12];

arbol *raiz = NULL;

printf("Ruta del archivo: ");

scanf("%s",&ruta);

printf("%s",ruta);

prueba = fopen(ruta, "rt");

if (prueba == NULL)

printf("Archivo no se encuentra");

else

{

printf("Archivo abierto");

raiz = leer(raiz, ruta);

imprime(raiz);

}



fclose(prueba);

return 0;

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder