这是我的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;

等等。 RAND_MAX 通常等于 INT_MAX, ,整数可以拥有的最大价值,因此在它仍然被认为是整数将其推到整数限制的同时,将其添加了1个。

其他提示

可能是 RAND_MAX + 1 那是溢出的,因为rand_max很可能是 == INT_MAX.

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

如果rand_max == max_int,则可能取决于您的编译器,然后rand_max+1将溢出。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top