Компиляция вашего кода выдает предупреждение:
program.c:26:24: warning: passing argument 2 of ‘createlist’ from incompatible pointer type [-Wincompatible-pointer-types]
createlist("file", list);
^
program.c:3:6: note: expected ‘char **’ but argument is of type ‘char (*)[40]’
void createlist(char* file, char **mylist) {
, которое говорит вам о том, что является одной из ваших проблем - указатель, который вы передаете на createlist
, является неправильным типом. Как объявлено, createlist ожидает массив указателей, но вы пытаетесь передать массив массивов. Существуют и другие проблемы, такие как сохранение адреса локальной переменной в массиве указателей, которая будет недействительной после возврата из функции.