Hola Rafael, tenés razón respecto a tus comentarios sobre la operación eliminar:
1) El nodo aEliminar debe ser iter->sig y no iter
2) No está contemplada la situación en que, cuando el nodo a eliminar es el mas reciente se actualice c->primero, esto es, como está planteada la solución c->primero quedaría apuntando a "basura"
Te mando una nueva versión de "eliminar" con las modificaciones y teniendo en cuenta que en el primer while también se pueden haber eliminado todos los comentarios.
saludos, libertad
-------------------------------
// Pos: elimina todos los comentarios eventualmente recibidos sobre el artículo dado
void eliminar(Comentarios &c, unsigned int idArticulo){
while (c->ultimo != NULL && c->ultimo->id == idArticulo){
nodo* aEliminar = c->ultimo;
c->ultimo -> c->ultimo->sig;
delete aEliminar;
c->cantidad--;
}
if (c->cantidad==0) c->primero=NULL;
if (c->ultimo != NULL){
nodo* iter = c->ultimo;
while (iter->sig != NULL){
if (iter->sig->id == idArticulo){
nodo* aEliminar = iter->sig;
iter->sig = iter->sig->sig;
if (iter->sig==NULL) c->primero=iter;
delete aEliminar;
c->cantidad--;
}
iter = iter->sig;
}
}
}
-------------------------------