Pregunta

Esta parte de mi código OpenGL, estoy consiguiendo un error para:

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
¿Fue útil?

Solución

Trate de convertir RAND_MAX a un flotador antes añadiendo a la misma.

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

etcétera. RAND_MAX es a menudo igual a INT_MAX, el valor más grande un número entero podría contener, añadiendo así 1 a ella mientras se sigue considerando un número entero lo empuja sobre el límite de número entero.

Otros consejos

Es probablemente RAND_MAX + 1 que se desborde, ya que RAND_MAX bien puede ser == INT_MAX.

Yo diría que su RAND_MAX es igual a su INT_MAX, por lo que todas sus piezas RAND_MAX+1 se desbordan. Ya que esos son dos constantes, el compilador puede detectar en tiempo de compilación.

Se podría depender de su compilador si RAND_MAX == MAX_INT continuación RAND_MAX + 1 se desbordará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top