El progtwig C para transferir el contenido de una matriz a otra produce un error de segmentación

C principiante aquí. Se supone que mi función de transfer toma 5 parámetros, dos matrices (la primera matriz tiene valores y la otra está vacía), un valor de longitud para las matrices, un tamaño de valor, una función de eliminación y una función de inserción. Luego toma los valores de la primera matriz y los coloca en una lista vinculada. Luego elimina los valores de la lista vinculada y los inserta en la 2ª matriz. Desafortunadamente, test.c el siguiente mensaje de error cuando la función de transfer ejecuta en el archivo test.c

Falla de segmentación: 11

Aquí están mis archivos, dll.c

 #include  List *List_create(void) { return calloc(1, sizeof(List)); } void add_to_back(List *list, void *value) { ListNode *node = calloc(1, sizeof(ListNode)); node->value = value; if (list->first == NULL) { list->first = node; list->last = node; } else { list->last->next = node; node->prev = list->last; list->last = node; } list->count++; } void *remove_from_back(List *list) { void *result = NULL; if (list->last == NULL) return result; ListNode *dead_node = list->last; result = list->last->value; if (list->last->value == list->first->value) { list->last = list->first = NULL; } else { list->last = list->last->prev; list->last->next = NULL; } free(dead_node); return result; } void add_to_front(List *list, void *value) { ListNode *node = calloc(1, sizeof(ListNode)); node->value = value; if (list->first == NULL) { list->first = node; list->last = node; } else { list->first->prev = node; node->next = list->first; list->first = node; } list->count++; } void *remove_from_front(List *list) { void *result = NULL; if (list->first == NULL) return result; ListNode *dead_node = list->first; result = list->first->value; if (list->last->value == list->first->value) { list->last = list->first = NULL; } else { list->first = list->first->next; list->first->prev = NULL; } free(dead_node); return result; return 0; } void transfer(void **arr1, void **arr2, int length, int size, void (*insert)(List *, void *), void* (*remove)(List *)) { List *list = List_create(); for (int i=0; i < length; i++) { (*insert)(list, &arr1[i]); } for (int i=0; i < length; i++) { void *indexPtr = arr2 + i*size; indexPtr = (*remove)(list); } } 

prueba.c

 #include  #include  #include  int test_add_to_back(void) { List *list = List_create(); int new_value = 1; add_to_back(list, &new_value); ListNode *curr = list->first; if (curr->value != &new_value) return 0; if (list->first->value != list->last->value || list->last->value != &new_value) return 0; new_value = 2; add_to_back(list, &new_value); new_value = 3; add_to_back(list, &new_value); new_value = 4; add_to_back(list, &new_value); curr = list->first; new_value = 4; if (list->last->value != &new_value) return 0; if (curr->value != &new_value) return 0; curr = curr->next; new_value = 2; if (curr->value != &new_value) return 0; curr = curr->next; new_value = 3; if (curr->value != &new_value) return 0; curr = curr->next; new_value = 4; if (curr->value != &new_value) return 0; return 1; } int test_remove_from_back(void) { List *list = List_create(); char *test1 = "test1 data"; char *test2 = "test2 data"; char *test3 = "test3 data"; add_to_back(list, test1); add_to_back(list, test2); add_to_back(list, test3); if (remove_from_back(list) != test3) return 0; if (remove_from_back(list) != test2) return 0; if (remove_from_back(list) != test1) return 0; return 1; } int test_add_to_front(void) { List *list = List_create(); char *test1 = "test1 data"; char *test2 = "test2 data"; char *test3 = "test3 data"; add_to_front(list, test1); add_to_front(list, test2); add_to_front(list, test3); ListNode *head = list->first; if (head->value != test3) return 0; head = head->next; if (head->value != test2) return 0; head = head->next; if (head->value != test1) return 0; return 1; } int test_remove_from_front(void) { List *list = List_create(); char *test1 = "test1 data"; char *test2 = "test2 data"; char *test3 = "test3 data"; add_to_back(list, test1); add_to_back(list, test2); add_to_back(list, test3); if (remove_from_front(list) != test1) return 0; if (remove_from_front(list) != test2) return 0; if (remove_from_front(list) != test3) return 0; return 1; } int test_transfer(void) { #define ARRAY_LENGTH 10 void *arr1[ARRAY_LENGTH]; for (int i = 0; i < ARRAY_LENGTH; i++) { arr1[i] = &i; } void *ptr; void *arr2[ARRAY_LENGTH]; for (int i = 0; i < ARRAY_LENGTH; i++) { arr2[i] = ptr; } transfer(arr1, arr2, ARRAY_LENGTH, sizeof(int), (*add_to_front), (*remove_from_front)); for (int i=0; i < ARRAY_LENGTH; i++) { printf("%d\n", *((int *)arr2[i])); } return 0; } int main() { printf("helloworld\n"); if(test_add_to_back() != 1) printf("Add to back test failed\n"); else printf("Add to back test passed\n"); if(test_remove_from_back() != 1) printf("Remove from back test failed\n"); else printf("Remove from back test passed\n"); if(test_add_to_front() != 1) printf("Add to back test failed\n"); else printf("Add to back test passed\n"); if(test_remove_from_front() != 1) printf("Remove from front test failed\n"); else printf("Remove from front test passed\n"); test_transfer(); return 0; } 

También tengo un archivo dll.h pero no lo dll.h .