O voi forumisti dalle ampie conoscenze saprete risolvere il seguente arcano (sarà sicuramente un errore del c@##o ma non ci cavo un ragno dal buco)

codice:
typedef struct cella * LIST;

struct cella{
	int cont;
	LIST succ;
	LIST prec;
};

void inser_dup(int x, LIST * punLL);
void print (LIST LL);

void main(){
	LIST L=NULL;
	int val=0;

	while(val != 10000){
		printf("\nInserisci un valore nella lista. 10000 per uscire\n");
		scanf("%d", &val);
		if (val!=10000)	inser_dup(val, &L);
	}

	print(L);
}

void inser_dup(int x, LIST * punLL){
	LIST aux, scorri=NULL;

	aux = (LIST) calloc (1, sizeof (struct cella));
	aux->cont = x;

	if((* punLL == NULL) || x < (* punLL)->cont){
		aux->prec=NULL;
		aux->succ = * punLL;
		(* punLL)->prec = aux;//acces violation
	}
	else{
		scorri = * punLL;
		while((scorri != NULL) && (scorri->cont < x)){
			scorri = scorri->succ;
		}
		(scorri->prec)->succ = aux;
		aux->prec = scorri->prec;
		scorri->prec = aux;
		aux->succ = scorri;
	}
}
Il mio problema è l'iserimento ordinato in una lista doppia. Ho da poco "scoperto" il mondo delle liste e quando si tratta di inserire valori in liste che puntano solo all'allocazione successiva non ci sono problemi! L'errore si genera in esecuzione e aprendo il debug mi dice che è "Access violation"!! Non so più dove sbattere la testa !!
Chi sa aiutare un povero disgraziato..

Ciao e grazie in anticipo