crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Задачка №4, проверяем знания, не используем компилятор...
ViGOur
  опции профиля:
сообщение 9.4.2008, 15:20
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Не пользуемся компилятором!

В какой строке (или строках) кода ниже выполнение программы не определено?
 1 struct Foo
2 {
3   virtual ~Foo() {}
4 };
5
6 struct Bar : public Foo
7 {
8 };
9
10 int main(int argc, char** argv)
11 {
12   Foo* f = new Bar;
13   delete f;
14   f = 0;
15   delete f;
16
17   Foo* fa = new Bar[10];
18   delete fa;
19   fa = 0;
20   delete fa;
21
22   return 0;
23 }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 9.4.2008, 16:14
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


В 18-ой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 9.4.2008, 16:19
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Во-первых, скорее всего ты хотел написать delete [] fa;(ибо в таком виде UB даже при совподении статического и динамического типа).
Во-вторых, _http://www.kuzbass.ru:8086/docs/isocpp/expr.html#expr.delete - см. 3-й параграф: In the second alternative (delete array) if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 20:05