errore di integer overflow
-
04-10-2019 - |
Domanda
Questa parte del mio codice OpenGL, sto ottenendo un errore per:
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
Soluzione
Prova conversione RAND_MAX
ad un galleggiante prima aggiungendo ad esso.
curBall->x=((float)rand()/( ((float)RAND_MAX) +1))*(ww-1) +1;
eccetera. RAND_MAX
è spesso uguale INT_MAX
, il valore più grande di un intero potrebbe contenere, aggiungendo così 1 ad essa mentre è ancora considerato un numero intero spinge oltre il limite intero.
Altri suggerimenti
E 'probabilmente RAND_MAX + 1
che è traboccante, dal momento che potrebbe essere RAND_MAX == INT_MAX
.
Direi tua RAND_MAX
è uguale al vostro INT_MAX
, in modo che tutti i pezzi RAND_MAX+1
sono stracolmi. Dal momento che questi sono due costanti, il compilatore può rilevare che al momento della compilazione.
Potrebbe dipendere dal vostro compilatore se RAND_MAX == MAX_INT poi RAND_MAX + 1 traboccherà.