Tengo una funcion en la cual abro un fichero binario y a continuacion llamo a otra funcion llamada buscar:
struct preguntas *buscar(FILE *pf){   
struct preguntas *aux=cab;                 //el valor de aux es el de cab
   int encontrado=0,preg;                   //aqui aux vale NULL
   preg=(random(20)+1);
   while(aux && encontrado==0){
      if(aux->n != preg)
         aux=aux->sig;
      else
         encontrado=1;
   }
   if(encontrado){
      fread(aux,sizeof(struct preguntas),1,pf);
      gotoxy(7,4);
      cprintf("%s",aux->texto);
      gotoxy(7,6);
      cprintf("%c. %s",aux->solu1.op,aux->solu1.texto1);
      gotoxy(7,7);
      cprintf("%c. %s",aux->solu2.op,aux->solu2.texto1);
      gotoxy(7,8);
      cprintf("%c. %s",aux->solu3.op,aux->solu3.texto1);
      gotoxy(7,9);
      cprintf("%c. %s",aux->solu4.op,aux->solu4.texto1);
   }
   return(aux);
}
Mi duda es la siguiente: ¿pq aux coje el valor de cab y en la siguiente linea vale NULL?. 
Gracias.