Сортировка слиянием массива строк
Пишу сортировку слиянием для массива строк. В строке 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;
}