Я пытаюсь реализовать алгоритм, используя рекурсию. В рекурсии я выделяю память, используя новую, а затем удаляю ее, но все же получаю утечки памяти. Я попытался понять, что я делаю неправильно, но не мог понять. Может ли кто-нибудь посмотреть, пожалуйста?Утечка памяти в рекурсии
- Я знаю, что могу использовать векторы, но хотел бы понять, что я сделал не так, и как исправить это.
это код:
#include <iostream>
#include <fstream>
#include <math.h>
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
using namespace std;
int sortInv(int*,int);
int Sort_And_count_split_Inv(int*,int,int,int);
int Sort_And_count(int *,int,int);
int main()
{
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int Siz = 9;
int Arr[9] = {66,3,11,76,93,9,22,56,89};
int b = Sort_And_count(Arr,0,Siz-1);
for (int i=0; i<Siz; i++)
Arr[i] = Arr[i];
return 0;
}
int Sort_And_count(int *a,int low,int high)
{
int mid;
int n = 0;
if (low >= high)
return 0;
else
mid = (high+low)/2;
n+= Sort_And_count(a,low, mid);
n+= Sort_And_count(a, mid+1, high);
n+= Sort_And_count_split_Inv(a,low,mid,high);
return n;
}
int Sort_And_count_split_Inv(int* a, int low, int mid, int high)
{
int i,j,k;
i=low;
j=mid+1;
k=low;
int count = 0;
int* tmp = new int[high-low+1];
while (i<=mid && j<=high)
{
if (a[i]<a[j])
{
tmp[k] = a[i];
i++;
}
else
{
tmp[k] = a[j];
j++;
count += mid-i == 0? 1: mid+1-i;
}
k++;
}
while (i<=mid)
tmp[k++] = a[i++];
while (j<=high)
tmp[k++] = a[j++];
for (i=low; i<=high; i++)
a[i] = tmp[i];
delete[] tmp;
_CrtDumpMemoryLeaks;
return count;
}
Вы уверены, что 'k' никогда не считается над' high-low' и 'tmp [k] = ...' пишет вне массива? Поскольку он начинает считаться с 'low' и вверх, он выглядит немного подозрительным. –