"solution.exe has stopped working" 在 Eclipse 中 CDT

"solution.exe has stopped working" in Eclipse CDT

我曾尝试在 Whosebug 上搜索答案并在谷歌上搜索了多次。我不太确定代码到底出了什么问题。当我在 Eclipse Luna 上 运行 它时,它只是说 "solution.exe has stopped working"。谁能帮我找出这里出了什么问题?或者给我一个方法让我自己找出答案?

这是我的代码:

#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

long mergeCountInv(long list[],long tmp[],long left,long mid,long right);
long countInv(long list[],long tmp[],long left,long right);


long mergeCountInv(long list[],long tmp[],long left,long mid,long right) {
    long i = 0,j = mid + 1,k = 0;
    long count = 0;

    while(i < mid && j < right) {
        if(list[i] <= list[j]) {
            tmp[k++] = list[i++];
        }
        else if(list[i] > list[j]) {
            tmp[k++] = list[j++];
            count++;
        }
    }
    while(i < mid) {
            tmp[k++] = list[i++];
        }

    while(j < right) {
            tmp[k++] = list[j++];
        }
    return count;
}

long countInv(long list[],long tmp[],long left,long right) {
    long k = 0,mid;
    if(right == 1) return 0;
    else {
        mid = (left + right)/2;
        k = countInv(list,tmp,left,mid) + countInv(list,tmp,mid + 1,right) + mergeCountInv(list,tmp,left,mid,right);
    }
    return k;
}


int main() {
    long list[100001];
    long i,x=0;

    ///////////////FILE HANDLING////////////////////////////////
    ifstream fin;
    fin.open("IntegerArray.txt");

    while (!fin.eof()) {
        fin >> i;
        list[x] = i;
        x++;
    }

    fin.close();
    ////////////////////////////////////////////////////////////

    long size = sizeof(list)/sizeof(long) - 1;

    long *tmp = new long[size];
    cout<<countInv(list,tmp,0,size);
    delete []tmp;
    return 0;
}

这些是"IntegerArray.txt"的内容:

6
3
5
4
2
1

文件中实际上将有 100000 个整数,但我首先使用较小的测试用例进行尝试。 感谢您的帮助!谢谢

如果 right 大于 1,则递归永远不会终止,因为递归的基本情况是 right == 1,而您有一个递归调用未修改地传递 right

也就是说,countInv(x,y,l,r) 调用 countInv(x,y,amidpoint,r),后者调用 countInv(x,y,anothermidpoint,r),依此类推,直到您永远陷入 countInv(x,y,r-1,r)

具体如何修复它取决于代码应该做什么,但您很可能想要一个涉及 left 以及 right.

的基本案例