数値の反転をカウントするように記述し、正常に実行しましgcc version 4.2.1 20070831 patched
たが、それを使用してコードブロックで実行すると、mingw32
誤って閉じてしまいます。
デバッグして、それがint *left = new int[middle];int *right = new int[length - middle];
butit just come to error when it recursive on second time
にあることがわかりました。なぜエラーが発生するのか、修正方法がわかりません。
私の質問は
1.エラーを修正するには?
2.確認したいだけかどうかわからないため、削除しなかった他のヒープが失われましたか。
事前にthx。
#include<iostream>
using namespace std;
int invCount(int*, int);
int merge(int*, int*, int, int*, int);
int main(void){
int array[] = {0, 1, 4, 3, 2};
cout << invCount(array, 5) << "times" << endl;
return 0;
}
int invCount(int *array, int length){
cout << "length:" << length << endl;
if(length <= 1){
return 0;
}
int middle = (length + 1) / 2;
cout << length << endl << middle << endl << length - middle << endl;
cout << endl;
int *left = new int[middle];
int *right = new int[length - middle];
for(int i = 0; i < middle; i ++)left[i] = array[i];//error
for(int i = middle; i < length; i ++)right[i] = array[i];//error
return invCount(left, middle) + invCount(right, length - middle
) + merge(array, left, middle, right, length - middle);
}
int merge(int* array, int* left, int leftLength, int* right, int rightLength){
int i = 0, j = 0, count = 0;
while(i < leftLength || j < rightLength){
if(i == leftLength){
array[i + j] = right[j];
j ++;
}
else if(j == rightLength){
array[i + j] = left[i];
i ++;
}
else if (left[i] <= right[j]){
array[i + j] = left[i];
i ++;
}
else {
array[i + j] = right[j];
j ++;
count += leftLength - i;
}
}
delete[] left;
delete[] right;
return count;
}