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?