КИТА unofficial
Май 18, 2024, 04:55:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Искусство программирования (задача 13)  (Прочитано 16107 раз)
Описание темы: Unhandled exception
0 Пользователей и 1 Гость смотрят эту тему.
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« : Апрель 16, 2008, 02:36:44 »

Напишите программу на С (С++) которая вылетит с эксцепшеном.
Программа должна быть минимального размера.
« Последнее редактирование: Апрель 23, 2008, 11:28:56 от vimmax » Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #1 : Апрель 16, 2008, 02:55:33 »

Код: (cpp)
void main() {
int* z = z;
}
Записан
Alder
Администратор
Проректор
*****

Карма: +331/-16
Offline Offline

Пол: Мужской
Награды:
За II место в конкурсе поэзии (весна-2007)2 место в фотоконкурсе \За II место в фотоконкурсе \3 место в фотоконкурсе \2 место в фотоконкурсе \Лучший знаток музыки 2009Лучший знаток музыки 2010
Сообщений: 11224


just for fun


WWW
« Ответ #2 : Апрель 16, 2008, 03:00:58 »

Код: (c)
int main(int argc, char* argv[])
{
int *f;
return *f;
}

Код Некса короче Улыбка
Записан

"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #3 : Апрель 16, 2008, 04:00:38 »

naxellar отрабатывает нормально в VC6, без ошибок.
Alder прерывается с ошибкой, но надо еще меньше кода.
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #4 : Апрель 16, 2008, 05:58:15 »

Код: (c)
void main() {
  *(int*)0 = 1;
}


Вариация на тему:
Код: (c)
void main() {
  (*(int*)0)++;
}
Получим гарантированный segmentation fault.
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #5 : Апрель 16, 2008, 06:09:28 »

В языке С нет исключений.

Вот вам гарантированное исключение С++
Код: (cpp)
void main(){throw 1;}
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #6 : Апрель 16, 2008, 06:37:52 »

В языке С нет исключений.
Ясное дело. Но по формулировке вопроса и комментариям vimmax я понял, что нужно добиться аварийного завершения программы.

А код у тебя действительно получился самый короткий Улыбка
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #7 : Апрель 17, 2008, 01:08:16 »

vimmax, я в VS2008 пробовал. Компилятор не указывали, значит текущий, значит мой Показывает язык ибо устревшее не катит. Подмигивающий
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #8 : Апрель 17, 2008, 01:26:27 »

naxellar, вот именно, раз компилятор не оговоривался, то речь шла именно о языке С++, значит ориентироваться нужно не на какой-либо компилятор, а на стандарт языка С++.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #9 : Апрель 17, 2008, 01:51:03 »

LazarusLong, дык стандарт не описывает, где возникнет исключение, где программа вылетит... Все зависит от того, как понимает код компилятор.
Записан
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #10 : Апрель 17, 2008, 07:19:29 »

int main(int argc, char* argv[])
{
   int *f;
   return *f;
}

Alder прерывается с ошибкой, но надо еще меньше кода.
vimmax, а у меня на Borland C++ 3.11 код Alder'a отрабатывает нормально без каких-либо ошибок Улыбка Код EvilMax'a у меня тоже работает и не вызывает аварийного завершения работы. Borland C++ 3.11 рулит !  Показывает язык
« Последнее редактирование: Апрель 17, 2008, 07:29:43 от artem90 » Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #11 : Апрель 17, 2008, 09:27:44 »

Гарантированно вызовет исключение лишь код Sochin'a )))
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #12 : Апрель 17, 2008, 11:48:35 »

artem90, угу, ибо ДОСу по барабану доступ к памяти, которую не отвели. На самом деле, даже если спорить о формулировке условия задачи, код Sochin'a самый короткий.
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #13 : Апрель 17, 2008, 04:48:19 »

Sochin чисто программистский код) нормально.
только у меня другой вариант.
Кто догадается?
у меня вываливается с Stack overflow
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #14 : Апрель 17, 2008, 05:46:57 »

Под рукой компилятора никакого нет, но в голову почему-то лезет всякий бред типа

Код: (cpp)
void main()
{
      main();
}


(Отправлено в: 17 Апреля 2008, 17:44:51)

Онлайн-компилятор откомпилил без ошибок, а при запуске программа вылетела ))))

Цитировать
C/C++ Front-end Compiler & Virtual Machine, Version 3.0.
Copyright (c) 1998-2003, Interstron, Ltd.

*** C++ FrontEnd

Warnings: 0
Errors  : 0
Fatal   : 0
RetCode : 0

*** VM execute
start program 'D:\soft\compiler\tmp\test.cpp.ir'

Fatal: INTERNAL ERROR!!!, Code: 8192376

NODE N: 91461, Type=4, Source: main() , File Name: D:\soft\compiler\tmp\test.cpp.9, Str: 2, Pos: 17


NODE N: 91461, Type=4, Source: main() , File Name: D:\soft\compiler\tmp\test.cpp.9, Str: 2, Pos: 17

Elapsed time = 1563 msec = 1 sec
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #15 : Апрель 17, 2008, 06:12:51 »

LazarusLong угу, точно, у меня такой ответ.
Только не знаю кому ставить +1 теперь.

Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
Alder
Администратор
Проректор
*****

Карма: +331/-16
Offline Offline

Пол: Мужской
Награды:
За II место в конкурсе поэзии (весна-2007)2 место в фотоконкурсе \За II место в фотоконкурсе \3 место в фотоконкурсе \2 место в фотоконкурсе \Лучший знаток музыки 2009Лучший знаток музыки 2010
Сообщений: 11224


just for fun


WWW
« Ответ #16 : Апрель 17, 2008, 06:17:10 »

vimmax, считай посимвольно Улыбка
Записан

"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #17 : Апрель 17, 2008, 06:19:32 »

А вот Builder 6 не компилит этот код
Цитировать
[C++ Error] File1.cpp(2): E2120 Cannot call 'main' from within the program
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
Alder
Администратор
Проректор
*****

Карма: +331/-16
Offline Offline

Пол: Мужской
Награды:
За II место в конкурсе поэзии (весна-2007)2 место в фотоконкурсе \За II место в фотоконкурсе \3 место в фотоконкурсе \2 место в фотоконкурсе \Лучший знаток музыки 2009Лучший знаток музыки 2010
Сообщений: 11224


just for fun


WWW
« Ответ #18 : Апрель 17, 2008, 06:22:25 »

vimmax, думаю задачу стоит усложнить - код должен вываливаться как минимум в 3 разных компилерах - BC 3.1, Builder6, MS VC++.
Записан

"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #19 : Апрель 17, 2008, 07:14:44 »

Код: (c)
void main() {
char a[10000000L];
}

Stack overflow Смеющийся
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #20 : Апрель 17, 2008, 07:26:54 »

void main() {
char a[10000000L];
}

Stack overflow
А в BC 3.11 такое даже "строгий Улыбка" компилятор не пропускает:  "Array size too large"  Смеющийся

Записан
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #21 : Апрель 18, 2008, 09:48:01 »

А вот Builder 6 не компилит этот код
Цитировать
[C++ Error] File1.cpp(2): E2120 Cannot call 'main' from within the program
Совершенно верно не компилит. Стандарт С++ запрещает вызов функции main() из программы. Любой компилятор С++, который это позволяет не то что не соответствует требованиям стандарта, но прямо их нарушает.
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #22 : Апрель 21, 2008, 07:16:32 »

Sochin +1. Его ответ более всего удовлетворяет условию задачи.
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #23 : Май 01, 2008, 11:27:58 »

С таким кодом вываливается даже 3.11-ый  Смеющийся
Код: (cpp)
class A
  {
    A(int a=1);
    friend void b() { }
  };
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #24 : Май 01, 2008, 12:27:46 »

artem90, Билдер и BC 3.11 нормально скомпилировали и запустили этот код. Если же пытаться объявить объект этого класса, то вполне прогнозируемо программа не компилируется (невозможно вызвать приватный конструктор). Но ошибка компиляции и ошибка времени выплонения - это разные вещи Улыбка
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #25 : Май 01, 2008, 03:22:10 »

Билдер и BC 3.11 нормально скомпилировали и запустили этот код. Если же пытаться объявить объект этого класса, то вполне прогнозируемо программа не компилируется (невозможно вызвать приватный конструктор)

У меня BC 3.11 под Windows при попытке скопилировать и запустить эту программу выдает сообщение об ошибке, с одной лишь кнопкой "Закрыть", по нажатию на которую компилятор закрывается. А 3.11 под DOS при попытке скомпилить или запустить этот код просто выкидывает в Windows. И это уже ошибка на этапе выполнения, а ошибки компиляции у меня никакой нет.
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #26 : Май 01, 2008, 03:55:46 »

Ну и все равно:) Ничего криминального в объявлении такого класса нет. Ну ясно что объявление в приватной части класса конструктора по умолчанию и дружественной функции по меньшей мере странно но не смертельно. У тебя прсто функции main() нет. Допиши её и все будет нормально запускаться. Сам по себе такой код не смертелен. Билдер, к примеру, говорит при попытке собрать такой код: Linker error: unresolved external main и программа просто не запускается Улыбка
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #27 : Май 01, 2008, 07:47:54 »

У тебя прсто функции main() нет. Допиши её и все будет нормально запускаться.
Хоть с меином, хоть без меина, хоть в ДОСе, хоть в Винде, но этот код 3.11-ый не запустит нигде !!!  Улыбка
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #28 : Май 01, 2008, 08:25:36 »

artem90, С++Builder этот код запускает. И TC 3.11 тоже. ВизуалСтудии под рукой сейчас нет, но, думаю она тоже запустит.

(Отправлено в: 01 Мая 2008, 20:17:42)

А mingw просто не компилит этот код с ошибкой:)

ISO C++ forbids declaration of b with no type
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #29 : Май 01, 2008, 08:37:53 »

С++Builder этот код запускает. И TC 3.11 тоже. ВизуалСтудии под рукой сейчас нет, но, думаю она тоже запустит.
Ну значит это просто глюк Борланда Улыбка
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.204 секунд. Запросов: 35.