Первое замечание:
int i;
List *tmp = array;
array = (List*)malloc((dim+1) * sizeof(List));
for (i = 0;i < dim;i++){
array[i] = tmp[i];
}
Может быть просто так:
array = realloc(array, (dim+1) * sizeof(List));
in array[dim-1] = (List)malloc(sizeof(struct TList));
, почему тип в приведении не является также типом в sizeof ?
Но настоящий вопрос в том, что вы ожидаете от выполнения этого задания, кроме как потерять память из-за утечки памяти?
Эта строка должна быть удалена.
Каковы определения TList и списка и типа set ?
Линия
memcpy(array[dim-1], set, sizeof(struct TList));
неверно и должно быть ( установлено должно быть списком)
array[dim-1] = set;
потому что массив - это вектор Список , а не вектор Список *