I want to create a function, where I will scann elements (int) to an array and call this fuction in main, freeing memory also has to be in main.
int main () {
    int size = 0;
    int* arr = malloc (sizeof(int));
    char sign;
    int i = 0;
    do {
        scanf ("%d%c", &arr[i], &sign);
        i++;
    arr = realloc(arr, sizeof(int) * (i + 1));
    } while (sign != '\n');
    free(arr);
}
I 've tried to do this,
void initialize(int* arr) {
    char sign;
    int i = 0;
    do {
        scanf ("%d%c", &arr[i], &sign);
        i++;
        arr = realloc(arr, sizeof(int) * (i + 1));
    } while (sign != '\n');
}
int main () {
    int size = 0;
    int* arr = malloc (sizeof(int));
    
    initialize(arr);  
    free(arr);
  }
but I have an error
==140978== 1 errors in context 1 of 2:
==140978== Invalid free() / delete / delete[] / realloc()
==140978==    at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==140978==    by 0x1092A0: main (lol.c:21)
==140978==  Address 0x4a9a040 is 0 bytes inside a block of size 4 free'd
==140978==    at 0x484DCD3: realloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==140978==    by 0x109244: initialize (lol.c:10)
==140978==    by 0x109294: main (lol.c:19)
==140978==  Block was alloc'd at
==140978==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==140978==    by 0x109284: main (lol.c:17)
Can I scann and fill a dynamic array in this way?
 
     
     
    