I would like to ask, what am I doing wrong with memory management. I just want to read some int array from stdin and then print it. Starting from 2 elements, then allocating by 2 to amount I will be satisfied with.
#include <stdio.h>
#include <stdlib.h>
void read (int * array, int * n, int * l) {
int * tmp;
printf("Enter values:\n");
for (*l = 0; *l < *n; (*l)++) {
if (*l == *n - 1) {
(*n) *= 2;
tmp = (int*) realloc (array, sizeof(int) * (*n));
if (tmp != NULL) {
array = tmp;
free(tmp);
}
else {
printf("Error!\n");
free(tmp);
}
if (scanf("%d", &array[*l]) != 1) break;
}
}
void print (int * array, int length) {
int i;
printf("Your values:\n");
for (i = 0; i < length; i++) printf("%d ", array[i]);
}
int main (void) {
int n = 2; /* number of array elements */
int length = 0;
int * array = (int *) malloc(sizeof(int) * n);
read(array, &n, &length);
print(array, length);
free(array);
return 0;
}