Вам нужно передать адрес "массива" в функцию. То есть вам нужен чарс ***. Это потому, что вам нужно изменить значение массива, выделив ему память.
РЕДАКТИРОВАТЬ: просто, чтобы сделать его более полным, в объявлении функции необходимо иметь что-то вроде
void make(char ***array, int *array_size)
Тогда вам нужно позвонить, используя
make(&array, &size);
Внутри функции сделать , выделить память с помощью
*array = malloc(ELEMENTS * sizeof(char *));
И соответственно поменяйте местами.
Также, как указывал kauppi, strdup выделит вам память, поэтому вам не нужно выполнять malloc для каждой строки.