Сортировка слиянием массива строк

Пишу сортировку слиянием для массива строк. В строке 27 (strcpy(a[k], c[k]);) возникает нарушение прав доступа при первой же попытке выполнения строки. Помогите, пожалуйста!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char** c;

void MergeSortRec(char* a[], int size)
{
    int M, k = 0, i = 0, j;

    if (size < 2)
        return;
    M = size / 2;
    j = M;
    MergeSortRec(a, M);
    MergeSortRec(a + M, size - M);

    for (k = 0; k < size; k++)
    {
        if (j >= size || i < M && strcmp(a[i], a[j]) < 0)
            strcpy(c[k], a[i++]);
        else
            strcpy(c[k], a[j++]);
    }

    for (k = 0; k < size; k++)
        strcpy(a[k], c[k]);
}

void MergeSort(char* a[], int size)
{
    c = malloc(sizeof(char*) * size);
    if (c == NULL)
        return;

    for (int i = 0; i < size; i++)
    {
        c[i] = malloc(sizeof(char) * 20);
        if (c[i] == NULL)
        {
            for (int j = 0; j < i; j++)
                free(c[j]);
            free(c);
            return;
        }
    }
    MergeSortRec(a, size);

    for (int i = 0; i < size; i++)
        free(c[i]);
    free(c);
}

int main()
{
    char* arr[] = {"banana", "apple", "orange", "grape"};
    int size = sizeof(arr) / sizeof(arr[0]);

    MergeSort(arr, size);

    for (int i = 0; i < size; i++)
        printf("%s", arr[i]);

    return 0;
}

Ответы (0 шт):