Ошибка C ++ 0xC0000005, вызванная выделением указателей / динамика c - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь реализовать MergeSort с использованием указателей, и все работает, пока я не вызову функцию несколько раз подряд, затем код прерывается и возвращает эту ошибку 0xC0000005. Я предполагаю, что это из-за переполнения памяти, так как я не освобождаю ее. Я новичок в динамической c памяти и указателях и не знаю, как это исправить.

int* MergeV1(int *x,int n,int *y,int m)
{
    int i=1,j=1,l=0;
    int *aux=new int[n+m+1];
    while(i<=n&&j<=m)
    {
        while(i<=n&&x[i]<=y[j])
            aux[++l]=x[i++];
        while(j<=m&&y[j]<=x[i])
            aux[++l]=y[j++];
    }
    while(i<=n)
        aux[++l]=x[i++];
    while(j<=m)
        aux[++l]=y[j++];
    return aux;

}
int* MergeSortV1(int* v,int n)
{
    if(n==1)
        return v;
    int m=n/2;
    int lenst=m;
    int lendr=m;
    if(n%2)
        lendr++;
    int *s,*d;
    s=MergeSortV1(v,lenst);
    d=MergeSortV1(&v[m],lendr);
    return MergeV1(s,lenst,d,lendr);
}
...