#include <stdlib.h>

// allocate/copy a new array from a[]
int *copy(int a[], int size) {
  int i, *a2;

  a2 = malloc(size * sizeof(int));
  if (a2 == NULL) {
    // out of memory
    return NULL;
  }

  // do the copy
  for (i = 0; i < size; i++)
    a2[i] = a[i];

  return a2;
}

int main(int argc, char **argv) {
  int nums[4] = {1,2,3,4};
  int *ncopy = copy(nums, 4);

  // make sure copy succeeded by checking for NULL return
  if (ncopy == NULL) {
    // out of memory
    return -1;
  }
  // .. do something with the array here ..

  // when you're done, free up the memory
  // or if you don't, you have a memory leak
  //free(ncopy);

  return 0;
}