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_MAX为浮点数。

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

等等。RAND_MAX通常等于INT_MAX,一个整数可以容纳的最大值,因此在它仍被视为整数时将其加 1 会将其推到整数限制之上。

于 2010-05-07T18:04:38.277 回答
2

这可能RAND_MAX + 1是溢出的,因为 RAND_MAX 很可能是== 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 回答