Esercizio ricorsione-stringhe

Pasqua_11
Buongiorno, stavo eseguendo una prova d'esame e non riesco a trovarne l'errore. Mi chiede di creare una funzione ricorsiva che prenda in input una stringa e la converta in una lista sequenziale. La lista è composta da char della lettera, un int che indica quante volte la lettera si ripete ed ipotizzo anche il numero di elementi nella lista. Per esempio se la stringa è "ordini" la lista avrà 5 elementi
= o,1 r,1 d,1 i,2 n,1. Spero di essermi spiegato; cmq se compilo ed eseguo mi viene il classico errore di core dump. Questo è il codice
#include <stdio.h>
#include <stdlib.h>


typedef enum{true,false}boolean;
typedef struct{
    char Lettera[19];
    int Num[19];
    int Elem;
}Lista;

Lista *Funzione(char *s){
    int i=0;
    
    boolean doppione=false;
    Lista *list;
    list->Elem=0;
    if(*s=='\0') return list;
    while(i<list->Elem){
        if(*s==list->Lettera[i]){
           list->Num[i]++;
           doppione=true;
        }
        i++;
    }
    if(doppione!=true){
        list->Lettera[i]=*s;
        list->Num[i]=1;
        list->Elem++;

    }
    return Funzione(s++);

    
    
}
int main()
{   Lista *occorrenza;
    char *cane="cane";
    occorrenza=Funzione(*cane);
    printf("%d",occorrenza->Lettera[2]);
    
}  

il main è un semplice debug. Ho paura magari di sbagliare nella gestione delle stringhe. In ogni caso grazie per il supporto :smt023

Risposte
apatriarca
Un primo errore che ho visto si trova nel main. Hai passato la stringa come *cane, ma facendo in questo modo stai passando un valore char (la prima lettera 'c') e non il puntatore a tale carattere e quindi la stringa.

Nella funzione stai poi accedendo alla variabile membro Elem senza aver inizializzato/allocato la lista.

L'ultimo punto è che quello che hai chiamato lista non è affatto una lista, ma una struttura che contiene al suo interno due array di lunghezza fissa.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.