I am using dynamic memory allocation in C for a simple problem that I am trying to solve. It involves taking user input for the elements of 2 arrays. I was thinking that I will initialise the array to a large size and use realloc to reduce the size once the input has been completed. ?below is the code for same:
void arrayop()
{
    int val, i=0;
    int *arr1 = (int*) calloc(100,sizeof(int));
    int *arr2 = (int*) calloc(100,sizeof(int));
    printf("Enter first array:(-1 to stop)\n");
    while(val!=-1)
    {
        if(val != -1)
        {
            scanf("%d",&val);
            *(arr1 + i) = val;
            i++;
        }
    }
    //printf("\t%d\n",i);
    arr1 = (int*)realloc(arr1,(i));
    //printf("\t%d\n",(sizeof(arr1)));
    for(int j=0;j<i;j++)
    {
        printf("%d ",*(arr1 + j));
    }
    printf("\n");
}
However, realloc() is somehow overwriting already entered elements and filling them with garbage value. Can anyone give me any insight as to why this is happening, or where I am wrong?

 
    