typedef struct ArrayList
{
    // We will store an array of strings (i.e., an array of char arrays)
    char **array;
    // Size of list (i.e., number of elements that have been added to the array)
    int size;
    // Length of the array (i.e., the array's current maximum capacity)
    int capacity;
} ArrayList;
上記の構造体を使用して、文字列の配列にメモリを動的に割り当てるこの関数があります。
ArrayList *createArrayList(int length){
ArrayList *n = malloc(sizeof(ArrayList));
int initial = 0, i;
n->size = initial;
if (length > DEFAULT_INIT_LEN)
{
n->array = malloc(length * sizeof(char*));
n->capacity = length;
if (n->array == NULL)
    panic("ERROR: out of memory in Mylist!\n");
for (i = 0; i< n->capacity; i++)
{
    n->array[i] = NULL;
}
}
else
{
n->array = malloc(DEFAULT_INIT_LEN * sizeof(char*));
n->capacity = DEFAULT_INIT_LEN;
if (n->array == NULL)
    panic("ERROR: out of memory in Mylist!\n");
for (i = 0; i< n->capacity; i++)
{
    n->array[i] = NULL;
}
}
printf("-> Created new ArrayList of size %d\n", n->capacity);
return n;
}
私の問題は、メインのプログラムでこの関数を呼び出そうとするたびにクラッシュすることです:
ArrayList *destroyArrayList(ArrayList *list)
{
    free(list);
    return NULL;
}
プログラムをクラッシュさせることなく、createArrayList 関数によって割り当てられたメモリを解放する destroyArrayList 関数を正しく実装するにはどうすればよいですか?