Работаю в MSVS2008, пишу dll-ку для одной софтинки. Код:
Код | int ResolvePoint(Environment *env, RoboF::Point nodePoint) { int i, homeIn, OpponentIn, collision; float robotSize = ROBOT_SZ; collision = 1;
RoboF::Point homeBotPos, oppBotPos;
for (i = 0; i < 5; i++) { homeBotPos.x = env->home[i].pos.x; homeBotPos.y = env->home[i].pos.y;
oppBotPos.x = env->opponent[i].pos.x; oppBotPos.y = env->opponent[i].pos.y;
homeIn = RoboF::PointBelongsCircle(homeBotPos, nodePoint, robotSize); OpponentIn = RoboF::PointBelongsCircle(oppBotPos, nodePoint, robotSize);
if ( homeIn == 1 ) { collision = 0; //Нормально работает }; if ( OpponentIn == 1 ) { collision = 0; //Нормально работает }; };
//Провеяряем по границам - вот тут программа валиться. if ( ( FTOP - robotSize ) > nodePoint.y ) { collision = 0; //При том валиться на присвоении (манипуляции с другими переменными проходят успешно) }; if ( ( FBOT + robotSize ) < nodePoint.y ) { collision = 0; }; if ( ( FRIGHTX - robotSize ) > nodePoint.x ) { collision = 0; }; if ( ( FLEFTX + robotSize ) < nodePoint.x ) { collision = 0; };
return collision;
}
|
Суть в следующем - функция делает ряд проверок, и в случае если условие срабатывает - сбрасывает collision в 0. Но вот если с первыми двумя все работает (именно работает), но на 4х оставшихся проверках - просто валиться. Точнее валиться не на самих проверках, а на присвоении collision = 0. Повторюсь - без последних 4х проверок - функция работает нормально, как и та часть программы, что использует результат работы этой функции. А вот если добавить эти проверки (вернее опреции сброса переменной в ноль), но все - ёк. Подскажите, в чем может быть проблема. |