You have an uninitialized pointer p
declared here:
node*temp,*p;
And you are dereferencing it here, despite not having set it to any value:
while(p->next!=start)
Perhaps you want to add p=start;
to have it start at the first node.
Note that if you have a doubly-linked circular list, then you don't need the loop to find the last node: The last node is the one before the first node, i.e. start->pre
.