浮点异常(核心转储)非常奇怪

时间:2016-03-26 21:37:47

标签: c++

我知道这已经被问到了,但我还没找到并回答。 这是我的代码:

#include <cstdio>
#include <vector>
using namespace std;

int a[510];

int main()
{
    int n, p;
    bool rez;
    while(1)
    {
        p = 0;
        rez = 1;
        scanf("%d", &n);
        if(n == -1) break;
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);
        // printf("a");
        for(int i = n-1; i >= 0; i--)
        {
            if((a[i]+p)%i)
            {
                rez = 0;
                break;
            }
            p++;
        }
        if(rez) printf("S\n");
        else printf("N\n");
    }
    return 0;
}

除测试用例外,所有测试用例都能正常工作: 4 1 1 3 0 但 4 1 0 3 1 作品。 同样在有问题的测试用例中我插入了printf(“a”); 但程序不会打印它,表明问题发生在该行之前。但是,如果我删除其余代码,一切正常。

1 个答案:

答案 0 :(得分:0)

浮点异常不仅报告浮点错误,还报告整数除以0,包括取模数相对于0(如第一条评论中所述)。您的i循环会迭代到零。一旦发生这种情况 - 即当break语句未触发先前的i值时 - 您将看到浮点异常。