c++ - 整数溢出错误

标签 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

最佳答案

尝试将 RAND_MAX 转换为 float ,然后再添加到它。

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

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

关于c++ - 整数溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2790632/

相关文章:

c++ - unordered_set 将元素存储为指针

c++ - 在 .cpp 文件之间传递全局字符串变量?

c - 当 int 小于 size_t 时分配给 size_t

c++ - 模板运算符链接器错误

c++ - 如果找不到元素,std::find 返回什么

java - 分配参数类型对整数溢出的影响

java - java中位移位时溢出

c++ - 长长除错

java - 固定宽度的整数是否分配给乘法?

c++ - QWebEngineView 在外部浏览器中打开