Shell returned -1073741819



当我为问题农民戏剧- AIO 2016 (https://orac.amt.edu.au/cgi-bin/train/problem.pl?set=aio16int&problemid=903)运行下面的代码时,

#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
//freopen("farmin.txt", "r", stdin);
//freopen("farmout.txt", "w", stdout);
int n; cin >> n;

vector<int> p(n);
for (int i=0; i<n; i++) {
cin >> p[i];
}

int f=p[0], l=p[n-1], i1=0, i2=n-1, c=0;
while (i1!=i2) {
if (f==l) {
--i2; ++i1;
f = p[i1]; l = p[i2];
continue;
}
if (f<l) {
++i1;
f = f+p[i1];
c++;
}
if (l<f) {
--i2;
l = l+p[i2];
c++;
}
}
cout << c << 'n';
return 0;
}

终端返回shell返回的-1073741819,即使逻辑完全正确。确切的错误信息如下:

C:WINDOWSsystem32cmd.exe /c (AIO2016farmer)
6
1 1 1 1 1 1
shell returned -1073741819
Hit any key to close this window...

而如果我运行不同的输入,例如:

8
1 2 2 5 1 3 1 1

它运行得很好,并返回正确的输出:

这种情况经常发生,但我不知道是什么原因造成的。你能帮帮我吗,因为这很令人沮丧?

我在AddressSanitizer上运行了这段代码;你得到一个分段错误,因此你的shell退出与一个奇怪的返回代码。

问题出在这一行:

f = p[i1]; l = p[i2];

当针对提供的错误示例运行代码时,i1的值为6,这会导致溢出;i2值为-1,

尝试通过在while循环中添加另一个条件来防止这种情况,例如:
while(i1 > -1 && i1 != i2)

然而,我还没有测试过这个,这将防止错误,但我不确定它是否给出了正确的答案。

相关内容

  • 没有找到相关文章