質問
これは私の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;
et cetera。 RAND_MAX
多くの場合、に等しい INT_MAX
, 、整数が保持できる最大の値であるため、整数がまだ整数の制限にわたってプッシュされていると考えられている間、1を追加します。
他のヒント
おそらくそうです RAND_MAX + 1
rand_maxはかなりあるかもしれないので、それはあふれています == INT_MAX
.
私はあなたを推測します RAND_MAX
あなたと同等です INT_MAX
, 、だからあなたのすべて RAND_MAX+1
ピースはあふれています。これらは両方とも定数であるため、コンパイラはコンパイル時に検出できます。
rand_max == max_int then rand_max+1がオーバーフローする場合、コンパイラに依存する可能性があります。
所属していません StackOverflow