Проблема в том, что у вас неопределенное поведение, поэтому может случиться что угодно.Это может проявляться по-разному на разных машинах или компиляторах.Учтите это:
if (Arr->size == Arr->capacity) {
Arr->capacity *= 2;
int arr[Arr->capacity];
...
Arr->arr = arr; // Arr->arr points to a local variable!
Здесь вы создаете новый массив, а затем присваиваете его адрес вектору.Однако, когда эта функция завершается, эта память становится недействительной.Вместо этого замените его следующим:
int *arr = malloc(sizeof(int) * Arr->capacity);
И вы получите следующий вывод:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10
И не забудьте free
, когда закончите.Чтобы это работало должным образом, я бы рекомендовал изменить int arr[10];
на int arr = malloc(10*sizeof(int));
, чтобы массив никогда не находился в стеке, а затем поставить free(Arr->arr);
перед Arr->arr = arr;
и free(array.arr);
в концепрограмма.