Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > abnormal program termination


Автор: GeraldIstar 5.4.2012, 10:34
Работаю в 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х проверок - функция работает нормально, как и та часть программы, что использует результат работы этой функции. А вот если добавить эти проверки (вернее опреции сброса переменной в ноль), но все - ёк.
Подскажите, в чем может быть проблема.

Автор: bsa 5.4.2012, 11:18
GeraldIstar, каким компилятором собрана основная программа? Если другим, то попробуй сменить компилятор.

Автор: GeraldIstar 5.4.2012, 12:27
Проблема решена - я просто крайне не внимательный, блин ( Тему можно закрывать.

Автор: borisbn 5.4.2012, 12:37
GeraldIstar, и в любом случае (даже если один компилятор) в проекте основной программы и в проекте твоей dll-ки должны совпадать
1) типы вызова функций (__stdcall или __cdecl)
2) размер упаковки структур (#pragma pack...)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)