Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 18:06   #1
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
Счастье Breakpoints напритив delete[] не работает - Visual C++ v8.00

Всем здорово! Пишу прогу на Visual C++ v8.00
В проге есть класс:

Код:
class Date
{
	friend ostream &operator<<( ostream &, const Date &); 
	friend istream &operator>>( istream &, Date &);       
private:
	int number;			
	int montch;			
	int year;			
	int *days;			

public:
	Date();																
	~Date();																
	void DisplayDate() const;										
	void SetData();													
	bool CheckDay(int);												
	long int QuantityDays() const;								
	Date &operator -= (int);										
	Date &operator += (int);										
	int operator % (const Date&);									
};
Как вы заметили в классе есть деструктор ~Date();

Код:
Date::~Date()
{
	delete[] days;   

}
Но вот в чем проблема ставлю Breakpoints напритив delete[] days. И при выходе из проги он у меня не срабатывает.
Я пробовал в деструктор писать

fflush(stdin);
cin.get();

Прога все равно не останавливаеться. Я так решил что у меня деструктор не вызываеться, хотя конструктор срабатывает.
В чем дело?
Игорь007 вне форума Ответить с цитированием
Старый 02.06.2008, 20:42   #2
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Возможные причины «игнора» точки прерывания (убывание по степени вероятности происхождения):

1) Деструктор не вызывается. Почему это может быть:
a) Это может быть когда создаем объект динамически (посредством операторов new или new[]), а убить (вызвать delete или delete[]) забываем.
b) Это может быть когда объект не был создан, например, при возникновении исключении в конструкторе, которое не было обработано в нем же. Но об этом вы бы скорей всего узнали как-нибудь. (короче, вряд ли этот вариант)
2) Приложение запущено не в дебагере или без отладочной информации.
3) Глюк студии.

Подозреваю, что у вас именно 1 случай. Проверить это можно легко: в деструкторе напишите код, который выведет информацию в какой-нибудь файл, или просто его создаст.
filosof_x86 вне форума Ответить с цитированием
Старый 02.06.2008, 22:31   #3
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Пробовал, не помогает. Никакого файла не создаеться.
Игорь007 вне форума Ответить с цитированием
Старый 02.06.2008, 22:42   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

а собственно деструктор вызывается где-нибудь? это всёже не ява какая-нибудь, которая сама всё "лишнее" удаляет
pu4koff вне форума Ответить с цитированием
Старый 02.06.2008, 22:43   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Игорь007, показывайте код целиком.
B_N вне форума Ответить с цитированием
Старый 02.06.2008, 23:30   #6
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Игорь007 Посмотреть сообщение
Пробовал, не помогает. Никакого файла не создаеться.
Значит деструктор не вызывается. Покажи код работы с объектом этого класса.
filosof_x86 вне форума Ответить с цитированием
Старый 03.06.2008, 00:33   #7
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Смотрите
Код:
int main()
{
	long int additional;
	int i = 1;
	Date date1, date2;
	char buf;
	char buf2 = (char)251;

	while(1)
	{
		system("cls");						
		cout << date1;						
		buf = _getch();						
		if(buf == 13)											
		{
			switch(i)											
			{
			case 1:												
				system("cls");
				cin >> date1;								break;
			
			case 2:												 
				system("cls");
				cout << "Enter amount of days:\n";
				cin >> additional;			
				date1 += additional;							cout << "\nResult:\n";
				cout << date1;								fflush(stdin);
				cin.get();
				break;
			
			case 5:
				exit(1); 											
			}
			continue;
		}
		
	}
	return 0;
}
Может из-за exit(1);
Игорь007 вне форума Ответить с цитированием
Старый 03.06.2008, 00:43   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Игорь007 Посмотреть сообщение
Может из-за exit(1);
Не "Может из-за exit", а "из-за exit". И читайте документацию.

Цитата:
When you call the exit or _exit functions, the destructors for any temporary or automatic objects that exist at the time of the call are not called. An automatic object is an object that is defined in a function where the object is not declared to be static. A temporary object is an object created by the compiler. To destroy an automatic object before calling exit or _exit, explicitly call the destructor for the object.
B_N вне форума Ответить с цитированием
Старый 03.06.2008, 00:48   #9
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Именно, при вызове exit() процесс уничтожается, а конца области видимости переменных date1 и date2 не достигается или выхода из функции, из-за этого не происходит неявный вызов деструкторов.

Опередили
filosof_x86 вне форума Ответить с цитированием
Старый 03.06.2008, 00:50   #10
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Ну спасибо!!!
Игорь007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CTRL+ALT+DELETE terminadoor Помощь студентам 14 21.07.2008 16:22
new,delete alex87 Общие вопросы C/C++ 1 28.02.2008 17:50
клавиша delete andrey4623 Общие вопросы Delphi 6 17.01.2008 18:16
как отследить нажатие клавиши Delete D-fens Общие вопросы Delphi 4 07.06.2007 23:58
UPDATE и DELETE Дамир БД в Delphi 3 13.03.2007 01:44