进程返回-1073741819(0xC0000005)(为什么???)

时间:2019-03-25 16:19:07

标签: c++ codeblocks

所以我正在解决我的作业,并且我做了这段代码,应该在[a,b]的间隔中找到两个质数之间的最大差,然后我得到了“处理返回-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

3 个答案:

答案 0 :(得分:3)

在您的初始化循环中,当i46349i*i2,148,229,801时,该值大于有符号32位整数的容量,因此求值为{{1 }}。 -2,146,737,495然后导致崩溃。

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

答案 1 :(得分:2)

我猜测i*i较大时i溢出,导致j的值为负,并导致v[j]=1;的访问冲突。

答案 2 :(得分:0)

v[j]=1;行上有潜在的分段错误,其中j可能超过10000000

请检查您的边界。