整数溢出的错误

时间:2010-05-07 18:01:24

标签: c++ integer-overflow

这是我的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 个答案:

答案 0 :(得分:13)

尝试在添加之前将RAND_MAX转换为float

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

等等。 RAND_MAX通常等于INT_MAX,这是整数可以容纳的最大值,因此在它仍然被视为整数时将其加1会使其超过整数限制。

答案 1 :(得分:2)

可能RAND_MAX + 1溢出,因为RAND_MAX很可能是== INT_MAX

答案 2 :(得分:2)

我猜你的RAND_MAX等于你的INT_MAX,所以你的所有RAND_MAX+1件都在溢出。由于这些都是常量,编译器可以在编译时检测它。

答案 3 :(得分:2)

如果RAND_MAX == MAX_INT,则RAND_MAX + 1将溢出,这可能取决于您的编译器。