Tambien hay otro pequeño error(que no estoy seguro que sea error) que al parecer nadie noto:
Cita: struct Lista {
struct ElemLista *primero;
int numElem;
};
Si esto se trata de una lista enlazada, entonces que es:
struct ElemLista *primero;
es un puntero a otra estructura???
o lo que querias hacer era
struct Lista *primero;
Para apuntar al siguiente termino.
Es mas bien una duda con tu codigo.
Saludos