进程返回 -1073741819 (0xC0000005)(为什么??)
Process returned -1073741819 (0xC0000005) (why though??)
所以我在做作业,我做了这段代码,它应该找到 [a,b] 区间内两个素数之间的最大差异,我得到了 "Process returned -1073741819 (0xC0000005)"
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
bitset <10000000>v;
int main()
{
for (int i = 2; i < 10000000; i++)
{
if (v[i] == 0)
{
for (int j = i * i; j < 10000000; j += i)
v[j] = 1;
}
}
int n, a, b, maxi = 0, mini = 0, smax = 0;
cin >> a >> b;
int poz = a;
while (v[poz] == 1)
poz++;
int prev = poz;
poz++;
while (v[poz] == 1 && poz < b)
poz++;
if (poz == b && v[b] == 1)
{
cout << -1; return 0;
}
int next = poz;
poz++;
while (poz <= b)
{
if (next - prev > smax)
{
smax = next - prev;
maxi = next;
mini = prev;
}
if (v[poz] == 0)
{
prev = next;
next = poz;
}
poz++;
}
cout << mini << " " << maxi;
return 0;
}
我预计 43 和 47
您在行 v[j]=1;
上可能存在分段错误,其中 j
可能超过 10000000
。
请检查您的边界。
我猜测当 i
很大时 i*i
溢出,导致 j
的负值和 v[j]=1;
上的访问冲突。
在您的初始化循环中,当 i
为 46349
,i*i
为 2,148,229,801
,这大于有符号的 32 位整数,因此计算结果为 -2,146,737,495
。 v[j]
然后导致崩溃。
您应该修改代码以使用更大的数据类型,或者将 i
的限制设置为 sqrt(10000000)
而不是 10000000
。
所以我在做作业,我做了这段代码,它应该找到 [a,b] 区间内两个素数之间的最大差异,我得到了 "Process returned -1073741819 (0xC0000005)"
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
bitset <10000000>v;
int main()
{
for (int i = 2; i < 10000000; i++)
{
if (v[i] == 0)
{
for (int j = i * i; j < 10000000; j += i)
v[j] = 1;
}
}
int n, a, b, maxi = 0, mini = 0, smax = 0;
cin >> a >> b;
int poz = a;
while (v[poz] == 1)
poz++;
int prev = poz;
poz++;
while (v[poz] == 1 && poz < b)
poz++;
if (poz == b && v[b] == 1)
{
cout << -1; return 0;
}
int next = poz;
poz++;
while (poz <= b)
{
if (next - prev > smax)
{
smax = next - prev;
maxi = next;
mini = prev;
}
if (v[poz] == 0)
{
prev = next;
next = poz;
}
poz++;
}
cout << mini << " " << maxi;
return 0;
}
我预计 43 和 47
您在行 v[j]=1;
上可能存在分段错误,其中 j
可能超过 10000000
。
请检查您的边界。
我猜测当 i
很大时 i*i
溢出,导致 j
的负值和 v[j]=1;
上的访问冲突。
在您的初始化循环中,当 i
为 46349
,i*i
为 2,148,229,801
,这大于有符号的 32 位整数,因此计算结果为 -2,146,737,495
。 v[j]
然后导致崩溃。
您应该修改代码以使用更大的数据类型,或者将 i
的限制设置为 sqrt(10000000)
而不是 10000000
。