Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобратся почему прога вылетает, срочно 
:(
    Опции темы
knut
Дата 2.9.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Привет всем.
Помогите разобратся.почему прога вылетает при бxоде в if(bDR) 
//Error:: Unhandled exe.
polygon ето метод класса 
Код

void polygon()
    {
    for(vector<CPoint>::iterator it = p_vec.begin();it!=p_vec.end();it++ )
        {
        for(vector<CPoint>::iterator it1 = p_vec.begin();it1!=p_vec.end();it1++)
            {
        
            if((*it) == (*it1))
            continue;
                a = (*it).y - (*it1).y;
                b = (*it).x - (*it1).x;

                if(b!=0)
                {
                    K = a/b;
                }
                B = (*it).y - K*(*it).x;
                bDR = true;
                
                if((K > 0 && a < 0) || (K < 0 && a > 0) )
                {
                for(vector<CPoint>::iterator it2 = p_vec.begin();it2!vec.end();it2++)
                    {
                if(((*it2).y - K*(*it2).x - B) > 0 && ((*it2)!=(*it) &&(*it2)!=(*it1)) )
                        {
                            bDR = false;
                            break;
                        }
                    }
                }
                else
                {
            for(vector<CPoint>::iterator it2 = p_vec.begin();it2!=p_vec.end();it2++)
                    {
            if(((*it2).y - K*(*it2).x - B) < 0 && ((*it2)!=(*it) &&(*it2)!=(*it1)) )
                        {
                            bDR = false;
                            break;
                        }
                    }
                }

                if(bDR)
                {
                    
                    P_DC->MoveTo((*it).x,(*it).y);
                    P_DC->LineTo((*it1).x,(*it1).y);

                }
                
            }
        }
    }



Зараниее мерси.


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
ptr
Дата 2.9.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Давай весь класс, с примером кода когда падает, а не один метод smile .

Это сообщение отредактировал(а) ptr - 2.9.2006, 15:22


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
zkv
Дата 2.9.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



2knut, ptr прав, так трудно что то сказать, единственное что сразу бросилось в глаза, это 
стр. 20 
Код

(K > 0 && a < 0)

я не помню таблицу приоритетов наизусть, поэтому всегда ставлю скобки:
Код

( (K > 0) && (a < 0) )

и если приоритет у && выше чем у < (повторюсь, я не знаю точно, только предположение), то может здесь какие нибудь проблемы возникают? 

IMHO:   it->y;  визуально воспринимается легче чем (*it).y; 
PM MAIL   Вверх
knut
Дата 2.9.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



задча такова над построить выпулую оболочку.
Код

class LINE
{
public:
    Line();

public:
    vector<CPoint>p_vec;
    CRect rect;
    CDC *P_DC;
    double a,b,B,K;
    bool bDR;

public:
    void Select( CPoint m_point)//заносим все точки в вектор.
    {
        
        p_vec.push_back(m_point);
    
    }
    void Drow(CDC*p_DC) //рисуем точки.
    {
        for(vector<CPoint>::iterator it = p_vec.begin();it!=p_vec.end();it++)
        {
            rect.SetRect((*it).x + 5,(*it).y + 5,(*it).x - 5,(*it).y - 5);
            p_DC->Ellipse(rect);
        }
        
        
    }
    void polygon()//наxодет те точки из множество точек которие должны быть в выпуклои оболочки. 
    {
        for(vector<CPoint>::iterator it = p_vec.begin();it!=p_vec.end();it++ )
        {
            for(vector<CPoint>::iterator it1 = p_vec.begin();it1!=p_vec.end();it1++)
            {
                //if(((*it).x = (*it1).x) && ((*it).y == (*it1).y))
                if((*it) == (*it1))
                
                    continue;
                a = (*it).y - (*it1).y;
                b = (*it).x - (*it1).x;

                if(b!=0)
                {
                    K = a/b;
                }
                B = (*it).y - K*(*it).x;
                bDR = true;
                
                if((K > 0 && a < 0) || (K < 0 && a > 0) )
                {
            for(vector<CPoint>::iterator it2 = p_vec.begin();it2!=p_vec.end();it2++)
                {
                if(((*it2).y - K*(*it2).x - B) > 0 && ((*it2)!=(*it) &&(*it2)!=(*it1))   )
                        {
                            bDR = false;
                            break;
                        }
                    }
                }
                else
                {
            for(vector<CPoint>::iterator it2 = p_vec.begin();it2!=p_vec.end();it2++)
                    {
                if(((*it2).y - K*(*it2).x - B) < 0 && ((*it2)!=(*it) &&(*it2)!=(*it1))        )
                        {
                            bDR = false;
                            break;
                        }
                    }
                }

                if(bDR)
                {
                    //здесь вылетает
                    
                    P_DC->MoveTo((*it).x,(*it).y);
                    P_DC->LineTo((*it1).x,(*it1).y);
                }
                
            }
        }
    }

    
};
//class view

Код

void CNewView::OnDraw(CDC* pDC)
{
    CNewDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    
    p_Line->Drow(pDC);
    Invalidate(false);

    
    }

void CNewView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    p_Line->Select(point);
    
    Invalidate(false);
    

    CView::OnLButtonDown(nFlags, point);
}
void CNewView::OnPaint() 
{
    CPaintDC dc(this); 
    p_Line->Drow(&dc);

        
}





--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
Rockie
Дата 2.9.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



креативная вставка в коде  smile 

Зачем у тебя указано 3 раза public. 
Что за тип CRect, его нет в коде который ты привел


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ptr
Дата 2.9.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



knut, если не секрет, то где была выделена память под 
Код

CDC *P_DC;
?

Это сообщение отредактировал(а) ptr - 2.9.2006, 17:19


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
zkv
Дата 2.9.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



knut
интересно, а как вот это все инициализируется:
Код

public:                              //судя по public, внешними функциями? (ИМХО нехорошо)
    vector<CPoint>p_vec;
    CRect rect;
    CDC *P_DC;
    double a,b,B,K;
    bool bDR;

и вообще, ты выложил только код класса, который сам по себе ничего не делает, нужно же еще показать как ты этот класс потом конкретно применяешь, т.е. как члены инициализируешь, какие методы вызываешь...
PM MAIL   Вверх
knut
Дата 2.9.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



ptr 
P_CD ето указатель типа CDC класса если внимателно посматреть я исползобвал (p_DC)такой же указател в коде  и некакиx проблем. 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
zkv
Дата 2.9.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(knut @  2.9.2006,  17:24 Найти цитируемый пост)
P_CD ето указатель типа CDC класса если внимателно посматреть я исползобвал (p_DC)такой же указател в коде  и некакиx проблем.  

smile
Код

int *a=0; // указатель 
int *b=0; // такой же указатель
a = new int;
*a = 1;  //будет работать 
*b = 1; //не будет работать 

PM MAIL   Вверх
vinter
Дата 2.9.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

Зачем у тебя указано 3 раза public. 

так кстати даже визард делает, чтобы как то различать где данные, где конструктор, а где методы класса, просто для глаз приятнее ИМХО
Цитата

Что за тип CRect, его нет в коде который ты привел

Это стандартный тип Visual'a



Это сообщение отредактировал(а) vinter - 2.9.2006, 17:39


--------------------
Мой блог
PM MAIL WWW   Вверх
ptr
Дата 2.9.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Цитата(knut @  2.9.2006,  21:24 Найти цитируемый пост)
P_CD ето указатель типа CDC класса если внимателно посматреть я исползобвал (p_DC)такой же указател в коде  и некакиx проблем.  

При чём тут p_DC? Я тебя не про это спрашивал. Где ты создаешь объект для P_DC?

Цитата(knut @  2.9.2006,  21:24 Найти цитируемый пост)
P_CD ето указатель типа CDC класса

Это я заметил smile .

Да и вообще, если хочешь чтобы тебе быстро помогли, то выкладывай весь код, а не по частям.


Это сообщение отредактировал(а) ptr - 2.9.2006, 17:48


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
zkv
Дата 2.9.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(vinter @  2.9.2006,  17:38 Найти цитируемый пост)

Цитата

Зачем у тебя указано 3 раза public. 

так кстати даже визард делает, чтобы как то различать где данные, где конструктор, а где методы класса, просто для глаз приятнее ИМХО

согласен, только в этом случае непонятно почему 3 а не 2 раза (не понятно зачем обособили Line(), если бы он был единственным интерфейсным методом, было бы понятно)

Добавлено @ 17:50 
Цитата(vinter @  2.9.2006,  17:38 Найти цитируемый пост)

Цитата

Что за тип CRect, его нет в коде который ты привел

Это стандартный тип Visual'a


я бы сказал класс из MFC
PM MAIL   Вверх
knut
Дата 3.9.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Подскажите только одно пчему в этом отрезке у меня прога вылетает как толко она заxодет в if() цыкл. дтугово не надо
Код

if(bDR)
    {
    P_DC->MoveTo(it->x,it->y); // P_DC это указатель типа CDC класса.
    P_DC->LineTo(it1->x,it1->y);
}

проблема связанна с MoveТо() и LineTo().



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
vinter
Дата 3.9.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



у тебя же ptr русским по белому спросил: ГДЕ ТЫ ВЫДЕЛЯЕШЬ ПАМЯТЬ ПОД P_DC?????
что такое it и it1????
Скорее всего у тебя P_DC - "bad ptr"
кинь весь код и проблемы сразу решатся!!!


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 3.9.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



knut, надеюсь ты знаешь, что Line() - это не конструктор для class LINE? smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.