C ++ 0xC0000094:整数除零

时间:2013-03-18 16:39:05

标签: divide-by-zero

这段代码完美地运行到100000,但是如果你输入1000000,它就会开始给出错误C++ 0xC0000094: Integer division by zero。我确信这是浮点数。我尝试了(/ fp:precise),(/ fp:strict),(/ fp:except)和(/ fp:except-)的所有组合,但没有得到肯定的结果。

#include "stdafx.h"
#include "time.h"
#include "math.h"
#include "iostream"
#define unlikely(x)(x)

int main()
{
    using namespace std;
    begin:
    int k;
    cout<<"Please enter the nth prime you want: ";
    cin>>k;
    int cloc=clock();
    int*p;p=new int [k];
    int i,j,v,n=0;
    for(p[0]=2,i=3;n<k-1;i+=2)
    for(j=1;unlikely((v=p[j],pow(v,2)>i))?!(p[++n]=i):(i%v);++j);
    cout <<"The "<<k<<"th prime is "<<p[n]<<"\nIt took me "<<clock()-cloc<<" milliseconds to find your prime.\n";
    goto begin;
}

1 个答案:

答案 0 :(得分:1)

问题中显示的代码不会初始化p[1]或为其指定值。在设置for的{​​{1}}循环中,j=1用于p[j]的分配。结果为v的未知值。显然,它恰好为零,这导致表达式v中的除以零。

由于此代码未记录,结构不合理且不可读,因此正确的解决方案是丢弃它并从头开始。

浮点与问题没有关系,尽管使用i%v计算 v 2 是一个不好的选择; pow(v, 2)会更好。但是,当整数除以零时,某些系统会打印误导性消息“浮动异常”。尽管有消息,但这是整数操作中的错误。