(Consulta) Ejercicio de Listas en C - Error de Ejecucion

Iniciado por palacio29, 15 Octubre 2016, 18:12 PM

0 Miembros y 1 Visitante están viendo este tema.

palacio29

Hola

Tengo un ejercicio en el cual tengo que almacenar palabras en una lista y luego recibir un valor entero. Si la palabra de la lista es mayor o igual que la longitud que ingrese anteriormente, esa palabra va a ser guardada en una nueva lista.
Estoy intentadolo hacer pero al momento de ejecutar el programa, me da un error de ejecucion en la carga y no le encuentro la falla.
Creo que es un error de carga.

Adjunto el codigo haber si me pueden dar una mano

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

struct s_nodo
{
    char*palabra;
    struct s_nodo*sig;
};
typedef struct s_nodo*t_nodo;

void agregar(t_nodo*nodo);
char* carga(void);
void filtrar_palabras(t_nodo,t_nodo*,int);
void imprimir(t_nodo);
int main()
{
    int limite;
    t_nodo lista=NULL;
    t_nodo filtrada=NULL;

    agregar(&lista);
    agregar(&lista);
    agregar(&lista);
    agregar(&lista);
    printf("Palabras Originales Cargadas: \n");
    imprimir(lista);
    printf("\nIngrese un limite:");
    scanf("%d",&limite);
    printf("\nLista Modificada es : \n");
    imprimir(filtrada);


    return 0;
}
void agregar(t_nodo*nodo)
{
    if(*nodo==NULL)
    {
        *nodo=malloc(sizeof(struct s_nodo));
        (*nodo)->palabra=carga();
        (*nodo)->sig=NULL;
    }
    else
    {
        agregar(&(*nodo)->sig);
    }
}

char*carga(void)
{
    char*texto=NULL;
    int i=0;
    char letra;
    printf("\nIngrese palabra: ");
    letra=getche();
    texto=malloc(sizeof(char));
    if(texto==NULL)
    {
        printf("\nError en memoria");
        return texto;
    }
    while(letra!='\r')
    {
        *(texto+i)=letra;
        texto=realloc(texto,(i+i)*sizeof(char));
        i++;
        letra=getche();
    }
    *(texto+i)='\0';
    return texto;
}

void filtrar_palabras(t_nodo nodo,t_nodo*nodo1,int longitud)
{
    if(*(nodo1)=NULL)
    {
        if((strlen(nodo->palabra))>=longitud)
        {
            (*nodo1)->palabra=nodo->palabra;
            (*nodo1)->sig=NULL;
            nodo=nodo->sig;
        }
    }
    else
    {
        filtrar_palabras(nodo,&(*nodo1)->sig,longitud);
    }
}
void imprimir(t_nodo nodo)
{

    while(nodo!=NULL)
    {
        printf(" %s - ",nodo->palabra);
        nodo=nodo->sig;
    }



}