Ошибка сегментации в 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] становятся недоступны, не могу понять почему возникает ошибка.


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