Я пытаюсь реализовать 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);
}