saludo.
este es mi cod de lista; pasa que cuaando termino de guardar los elementos que recibe se muere el programa; si me pueden colaborar les agradeceria mucho..
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
typedef int tipo_dato;
//typedef int posicion;
typedef struct ListaNodo{    //define una lista de nodos 
         int numNodoInfo;
         struct ListaNodo *sig;
         } *pListaNodo;
typedef struct{ 
        pListaNodo cabeza,primero,ultimo;
        int longitud;
        } Tlista, *Lista;                
//typedef pListaNodo Ventana;
//typedef Lista lista;
Lista inicLista();
void anxLista(Lista lst);
void imprimir(Lista lst);
Lista inicLista (){ //inicializa una lista
       Lista resp;
       resp =(Lista)malloc(sizeof(Tlista)); //se reserva para resp el tamaño en bytes de Tlista
       resp->longitud= 0;
       resp->ultimo=NULL;
        return resp;
       } 
int Llena(Lista lst){//comprueba si la lista esta llena
  if(lst->cabeza==lst->ultimo)
   return(1);
  else
   return(0);
  }  
int vacia(Lista lst){//comprueba si la lista esta vacia
   if(lst->longitud==0)
   return 1;
   else
   return 0;
}  
pListaNodo finLista(Lista lst){
           return (lst->ultimo);
           }
pListaNodo Ultimo(Lista L) {
  return(L->ultimo);
  }      
int Primero(Lista lst){
          if(vacia(lst))
          return -1;
          else
          return 0;
}                                           
/*void Elementos(Lista L){
int n,i;
tipo_dato x;
system("cls");
  printf("¨Cu ntos elementos deseas insertar a la lista?n");
  scanf("%d", &n);
  for (i=1; i<=n; i++){
   printf("nElemento %d: n",i);
   scanf("%d", &x);
   }
   system("cls");
  // Imprime(L);
   getch();
}*/                                       
int menu();             
int main(){ 
    int opc, band;
    Lista lista;
   //lista->longitud = 0;
    do{
    band=1;
    opc=menu();            
    switch(opc){                
                case 1:{
                   lista->longitud = 0;
                   //anxLista(lista);
                     break;
                     }
                case 2:{                     
                    system("cls");
                          anxLista(lista);
                          getch();
                     break;
                     }
                     case 3:{
                             imprimir(lista);
                          break;
                          }
                          case 4:{
                               band=0;
                               break;
                }
                }
        }while(band ==1);
}             
int menu(){
 int c;
 system("cls");
 printf("nn    M  E  N  U     ");
// printf("n 1.-  para empezar elige opcion 1nn");
 printf("n 2.-para anexar un elemto elige la opcion  2nn");
 printf("n 3.- para imprimir elige la opcion 3nn");
 printf("n 4.- salir elige 4nn");
  printf("nnnn Elige una opcion");
 scanf("%d",&c);
 //system ("pause");
 return(c);
}
void anxLista( Lista lst){    //agrega un elemento despues de la ventana              
              int v,n,i;
              printf("cuantos elementos desea ingresar");
              scanf("%d",&n);              
              for(i=1;i<=n;i++){                    
              printf("ingrese el valor %d  ",i);
              scanf("%d",&v);
              }              
              pListaNodo nuevo = (pListaNodo)malloc( sizeof( struct ListaNodo));
              nuevo->numNodoInfo = v; 
              nuevo->sig = NULL;
              pListaNodo tmp  = lst->cabeza;                                             
              lst->cabeza = nuevo;
              lst->ultimo=nuevo;
              //lst-> longitud++;                            
              }
              else{
                   while(tmp->sig!=NULL){
                      tmp = tmp->sig;  
                    }
                    tmp->sig = nuevo;
                    lst->ultimo->sig = nuevo;
                    lst->ultimo = nuevo;
                    lst-> longitud++;
             }             
             //system ("pause");
             }             
void imprimir(Lista lst){
    int i;
    pListaNodo tmp = lst->cabeza;
    if(vacia(lst)==1){
        printf("la lista esta vacia");
    }else{                   
                      //tmp=lst->ventana;
                      while(tmp!=NULL){                                                       
                                        printf("%dn",tmp->numNodoInfo);
                                        tmp=tmp->sig;
                                        //lst=lst->ventana->sig;
                                        }
                      }
                      // system ("pause");
    }