Ho tweakato un pò il codice e sembrerebbe che funzioni però non so se risolve il problema in modo efficente:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=1,stop=0,temp;
//alloco memoria e leggo il primo elemento
int *ptr=malloc(1*sizeof(int));
scanf("%d",&ptr[0]);
//uso questo ciclo per allungare di un intero l'array nella heap finchè non digito -1
while(!stop)
{scanf("%d",&temp);
if(temp==0 || temp==1)
{ptr=realloc(ptr,1*sizeof(int));
ptr[i]=temp;}
else
if(temp==-1)
stop=1;}
return 0;
}