質問

これは私のopenglコードの一部です、私は次のことのエラーを取得しています:

struct Ball {
    float x;
    float y;
    float rot;
    float dir;
    bool rmv;
    Ball* next;
};

Ball* curBall;
void addBall() {
    if (balls==NULL) {
        balls=new Ball;
        balls->next=NULL;
        curBall=balls;
    } else {
        curBall->next=new Ball;
        curBall=curBall->next;
        curBall->next=NULL;
    }
    curBall->x=((float)rand()/(float)(RAND_MAX+1))*(ww-1) +1;
    curBall->y=((float)rand()/(float)(RAND_MAX+1))*(wh-1) +1;
    curBall->dir=((float)rand()/(float)(RAND_MAX+1))*(2*PI-1) +1;
    curBall->rot=((float)rand()/(float)(RAND_MAX+1))*(359) +1;
    curBall->rmv=false;
}

error :
In function ‘void addBall()’:
file.cpp:120: warning: integer overflow in expression
file.cpp:121: warning: integer overflow in expression
file.cpp:122: warning: integer overflow in expression
file.cpp:123: warning: integer overflow in expression
役に立ちましたか?

解決

変換してみてください RAND_MAX フロートに それに追加。

curBall->x=((float)rand()/( ((float)RAND_MAX) +1))*(ww-1) +1;

et cetera。 RAND_MAX 多くの場合、に等しい INT_MAX, 、整数が保持できる最大の値であるため、整数がまだ整数の制限にわたってプッシュされていると考えられている間、1を追加します。

他のヒント

おそらくそうです RAND_MAX + 1 rand_maxはかなりあるかもしれないので、それはあふれています == INT_MAX.

私はあなたを推測します RAND_MAX あなたと同等です INT_MAX, 、だからあなたのすべて RAND_MAX+1 ピースはあふれています。これらは両方とも定数であるため、コンパイラはコンパイル時に検出できます。

rand_max == max_int then rand_max+1がオーバーフローする場合、コンパイラに依存する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top