进程返回 -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; 上的访问冲突。

在您的初始化循环中,当 i46349i*i2,148,229,801,这大于有符号的 32 位整数,因此计算结果为 -2,146,737,495v[j] 然后导致崩溃。

您应该修改代码以使用更大的数据类型,或者将 i 的限制设置为 sqrt(10000000) 而不是 10000000