#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
  int *data;
  size_t size;
} *dynamic_array;

dynamic_array create_dynamic_array()
{
  dynamic_array array = malloc(sizeof(*array));
  array->data = NULL;
  array->size = 0;
  return array;
}

void* append_to_dynamic_array(dynamic_array array, int value)
{
  int *new_array = realloc(array->data, (array->size+1) * sizeof(*array->data));
  if (new_array)
    {
      array->data = new_array;
      new_array[array->size] = value;
      ++array->size;
    }
  return new_array;
}

void destroy_dynamic_array(const dynamic_array array)
{
  free(array->data);
  free(array);
}

int get_from_dynamic_array(const dynamic_array array, size_t index)
{
  return array->data[index];
}

size_t get_size_of_dynamic_array(const dynamic_array array)
{
  return array->size;
}

int main()
{
  dynamic_array my_array = create_dynamic_array();
  int value; 
  size_t i; 

  while(scanf("%d", &value) == 1)
    {
      if (!append_to_dynamic_array(my_array, value))
        {
          puts("Au weia! Kein Speicher mehr.");
        }
    }

  puts("Arrayinhalt:");
  for(i = 0; i < get_size_of_dynamic_array(my_array); ++i)
    printf("%d\n", get_from_dynamic_array(my_array, i));


  destroy_dynamic_array(my_array);
}
