Question

la partie de mon code OpenGL, j'obtiens une erreur pour:

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
Était-ce utile?

La solution

Essayez de convertir RAND_MAX à un flotteur avant ajouter.

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

et ainsi de suite. RAND_MAX est souvent égale à INT_MAX, la plus grande valeur d'un nombre entier pourrait tenir, ajoutant ainsi 1 pendant qu'il est encore considéré comme un pousse numériques.Elle sur la limite entière.

Autres conseils

Il est probablement RAND_MAX + 1 que ça déborde, car RAND_MAX pourrait bien être == INT_MAX.

Je suppose que votre RAND_MAX est égal à votre INT_MAX, de sorte que tous vos morceaux de RAND_MAX+1 sont pleins à craquer. Étant donné que ce sont les deux constantes, le compilateur peut détecter lors de la compilation.

Il pourrait dépendre de votre compilateur si RAND_MAX == MAX_INT puis RAND_MAX + 1 débordera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top