![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
decembrist |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
У меня есть класс, c кот. я работаю при помощи указателя.
Произвожу вычисления с полями и т.п. Как мне сделать так, чтоб корректно работал код:
То есть, если некоторое поле объекта удовлетворяет условию, пользуясь функцией класса нарисовать объект класса, если нет разрушить объект. Причем это крутится в цикле и pa->pole1 все время пересчитывается? |
||||
|
|||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
так и делай ( предварительно проверив валидность указателя )
в чем проблема? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Если выполнил delete для объекта, то присвой указателю значение 0 - это будет признаком того, что этот указатель более на объект не указывает.
Я так понял, проблема в том, что удалив объект, ты в следующем цикле на него ссылаешься? Это сообщение отредактировал(а) DENNN - 8.12.2004, 17:26 |
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
? Это сообщение отредактировал(а) Hroft - 9.12.2004, 09:59 |
|||
|
||||
decembrist |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Да, проблема в этом. Сейчас попробую проверить версию Hroft ![]() |
|||
|
||||
decembrist |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Вот. Подправил код:
и все равно вылетает. Потому, что после уничтожения объекта, цикл возвращается на строку
а значение pa->pole1= - 1.58839967Е+38 и снова пытается выполнить функцию pa->Draw(); ну и соответственно вылетает. Как этого всего избежать? |
||||
|
|||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Ничего подобного. На следующей итерации код попадает на строку
Запусти дебаггер и проверь в пошаговом режиме. Глядя на возникший вопрос у меня возникают сомнения, что указатель указывает "в никуда" еще до этого участка кода. Самый первый вызов Draw у тебя действительно работает? |
||||
|
|||||
decembrist |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Под дебаггером и работаю.Так вот, после удаления объекта, компилятор игнорирует обнуление указателя.Т.е. строчку pa = NULL; И код
выполняется и идет проверка
А вызовы pa->Draw (); и другие функции класса у меня работают. |
||||
|
|||||
srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Замени
на
Кстати, в Си++ использование NULL вместо 0 особого смысла не имеет. -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
decembrist |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Спасибо srd
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |