3

これは私の 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
4

4 に答える 4

13

追加する前にRAND_MAXfloatに変換してみてください。

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

など。RAND_MAX多くの場合、整数が保持できる最大値である に等しいためINT_MAX、整数と見なされている間に 1 を追加すると、整数の制限を超えてしまいます。

于 2010-05-07T18:04:38.277 に答える
2

RAND_MAXRAND_MAX + 1== INT_MAX.

于 2010-05-07T18:05:35.050 に答える
2

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

于 2010-05-07T18:05:40.943 に答える
2

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

于 2010-05-07T18:07:11.943 に答える