Ошибка сегментации в merge sort
Для программы реализовал merge sort с динамическим выделением памяти
void mainBodyMergeSort(int* arr, int** buff, int l, int r)
{
if (l == r)
return;
int mid = (l + r) / 2;
if (l < r) {
mainBodyMergeSort(arr, buff, l, mid);
mainBodyMergeSort(arr, buff, mid + 1, r);
}
int i = l, j = mid + 1, iter = 0;
while (i <= mid && j <= r) {
if (arr[i] < arr[j]) {
*buff[l + iter] = arr[i];
++i;
} else {
*buff[l + iter] = arr[j];
++j;
}
++iter;
}
while (i <= mid) {
*buff[l + iter] = arr[i];
++i;
++iter;
}
while (j <= r) {
*buff[l + iter] = arr[j];
++j;
++iter;
}
for (int i = l; i < r; ++i) {
printf("%d", (*buff)[i]);
arr[i] = *buff[i];
}
}
void mergeSort(int* arr, int l, int r)
{
int* puff = (int*)malloc(sizeof(int) * (r - l));
memset(puff, 0, sizeof(int) * (r - l));
int** duff = &puff;
mainBodyMergeSort(arr, duff, l, r - 1);
duff = NULL;
puff = NULL;
free(puff);
free(duff);
}
int main()
{
int arr[] = {7, 8, 4, 2, 5, 7, 1};
int afs = sizeof(arr) / sizeof(int);
int mergeArr[afs];
for (int i = 0; i < afs; ++i) {
mergeArr[i] = arr[i];
}
mergeSort(mergeArr, 0, afs);
for (int i = 0; i < afs; i++) {
printf("%d ", mergeArr[i]);
}
return 0;
}
В самом конце выполнения функции mainBodyMergeSort
получаю Segmentation fault, дебаггер в vscode при отслеживании переменных *buff[0]
и *buff[1]
при пошаговом выполнении показывает, что в цикле
while (j <= r) {
*buff[l + iter] = arr[j];
++j;
++iter;
}
при присваивании элементу *buff[1]
значения куда-то девается значение элемента *buff[0]
, что и вызывает ошибку сегментации.
При отладке через gdb в этом месте переменная *buff[0]
и *buff[1]
становятся недоступны, не могу понять почему возникает ошибка.