il seguente programma in C mi genera un errore...



typedef struct elem_i {
int val;
struct elem_i *next;
} Elem_int;

typedef Elem_int *Lista_int;

int main(int argc, char *argv[])
{
Lista_int l;
l=malloc(sizeof(Lista_int));
l->val=3;
l->next->val=5;
l->next->next->val=9;
l->next->next->next=NULL;
dividi(l);
getchar();
return 0;
}

void dividi(Lista_int l){
Lista_int tmp;
tmp=malloc(sizeof(Lista_int));
}


commentando le seguenti righe funziona:
l->val=3;
l->next->val=5;
l->next->next->val=9;
l->next->next->next=NULL;

qualcuno sa spiegarmi il perchè? grazie