while ( (Curr->Item < A) and (Curr->Succ != NULL) )
{
Prev = Curr;
Curr = Curr->Succ;
cout << Curr->Item;
}
That code sets Curr to the last item in the set that's smaller than A.
And then you compare the last item (curr->item) to A (to guarantee uniqueness) or NULL for the last item. And there's your problem I think, hehe.
What if Curr is NULL and you try to dereference Curr->item? Segfault. I hope that's the error.
So, correct code would be something like..
if(Curr == NULL){
//create new item, append it to the set
} else if (Curr->Item != A) {
//create new item, insert it between the two items.
}