"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
.
的基本案例
我曾尝试在 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
.