vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« : Апрель 16, 2008, 02:36:44 » |
|
Напишите программу на С (С++) которая вылетит с эксцепшеном. Программа должна быть минимального размера.
|
|
« Последнее редактирование: Апрель 23, 2008, 11:28:56 от vimmax »
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #1 : Апрель 16, 2008, 02:55:33 » |
|
void main() { int* z = z; }
|
|
|
Записан
|
|
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #3 : Апрель 16, 2008, 04:00:38 » |
|
naxellar отрабатывает нормально в VC6, без ошибок. Alder прерывается с ошибкой, но надо еще меньше кода.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #4 : Апрель 16, 2008, 05:58:15 » |
|
void main() { *(int*)0 = 1; }
Вариация на тему: void main() { (*(int*)0)++; }
Получим гарантированный segmentation fault.
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #5 : Апрель 16, 2008, 06:09:28 » |
|
В языке С нет исключений. Вот вам гарантированное исключение С++
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #6 : Апрель 16, 2008, 06:37:52 » |
|
В языке С нет исключений. Ясное дело. Но по формулировке вопроса и комментариям vimmax я понял, что нужно добиться аварийного завершения программы. А код у тебя действительно получился самый короткий
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #7 : Апрель 17, 2008, 01:08:16 » |
|
vimmax, я в VS2008 пробовал. Компилятор не указывали, значит текущий, значит мой ибо устревшее не катит.
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6133
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #8 : Апрель 17, 2008, 01:26:27 » |
|
naxellar, вот именно, раз компилятор не оговоривался, то речь шла именно о языке С++, значит ориентироваться нужно не на какой-либо компилятор, а на стандарт языка С++.
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #9 : Апрель 17, 2008, 01:51:03 » |
|
LazarusLong, дык стандарт не описывает, где возникнет исключение, где программа вылетит... Все зависит от того, как понимает код компилятор.
|
|
|
Записан
|
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
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
Пол: Награды:
Сообщений: 6133
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #11 : Апрель 17, 2008, 09:27:44 » |
|
Гарантированно вызовет исключение лишь код Sochin'a )))
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
EvilMax
Администратор
Завкаф
Карма: +59/-0
Offline
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #12 : Апрель 17, 2008, 11:48:35 » |
|
artem90, угу, ибо ДОСу по барабану доступ к памяти, которую не отвели. На самом деле, даже если спорить о формулировке условия задачи, код Sochin'a самый короткий.
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #13 : Апрель 17, 2008, 04:48:19 » |
|
Sochin чисто программистский код) нормально. только у меня другой вариант. Кто догадается? у меня вываливается с Stack overflow
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6133
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #14 : Апрель 17, 2008, 05:46:57 » |
|
Под рукой компилятора никакого нет, но в голову почему-то лезет всякий бред типа (Отправлено в: 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
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #15 : Апрель 17, 2008, 06:12:51 » |
|
LazarusLong угу, точно, у меня такой ответ. Только не знаю кому ставить +1 теперь.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
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
|
|
« Ответ #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
Пол:
Сообщений: 1072
Злой и страшный :)
|
|
« Ответ #19 : Апрель 17, 2008, 07:14:44 » |
|
void main() { char a[10000000L]; }
Stack overflow
|
|
|
Записан
|
Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач... --- Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
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
Пол:
Сообщений: 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
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #22 : Апрель 21, 2008, 07:16:32 » |
|
Sochin +1. Его ответ более всего удовлетворяет условию задачи.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #23 : Май 01, 2008, 11:27:58 » |
|
С таким кодом вываливается даже 3.11-ый class A { A(int a=1); friend void b() { } };
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6133
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #24 : Май 01, 2008, 12:27:46 » |
|
artem90, Билдер и BC 3.11 нормально скомпилировали и запустили этот код. Если же пытаться объявить объект этого класса, то вполне прогнозируемо программа не компилируется (невозможно вызвать приватный конструктор). Но ошибка компиляции и ошибка времени выплонения - это разные вещи
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #25 : Май 01, 2008, 03:22:10 » |
|
Билдер и BC 3.11 нормально скомпилировали и запустили этот код. Если же пытаться объявить объект этого класса, то вполне прогнозируемо программа не компилируется (невозможно вызвать приватный конструктор) У меня BC 3.11 под Windows при попытке скопилировать и запустить эту программу выдает сообщение об ошибке, с одной лишь кнопкой "Закрыть", по нажатию на которую компилятор закрывается. А 3.11 под DOS при попытке скомпилить или запустить этот код просто выкидывает в Windows. И это уже ошибка на этапе выполнения, а ошибки компиляции у меня никакой нет.
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6133
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #26 : Май 01, 2008, 03:55:46 » |
|
Ну и все равно:) Ничего криминального в объявлении такого класса нет. Ну ясно что объявление в приватной части класса конструктора по умолчанию и дружественной функции по меньшей мере странно но не смертельно. У тебя прсто функции main() нет. Допиши её и все будет нормально запускаться. Сам по себе такой код не смертелен. Билдер, к примеру, говорит при попытке собрать такой код: Linker error: unresolved external main и программа просто не запускается
|
|
|
Записан
|
Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.
"...Он любил говорить факин щит Когда что-то не так ему Принимал он свой самый ирландский вид И кидался трубкой в жену..."
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #27 : Май 01, 2008, 07:47:54 » |
|
У тебя прсто функции main() нет. Допиши её и все будет нормально запускаться. Хоть с меином, хоть без меина, хоть в ДОСе, хоть в Винде, но этот код 3.11-ый не запустит нигде !!!
|
|
|
Записан
|
|
|
|
LazarusLong
Ирландский доброволец
Проректор
Карма: +181/-7
Offline
Пол: Награды:
Сообщений: 6133
Ukrainian by birth, Irish by the grace of God
|
|
« Ответ #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
Пол:
Сообщений: 1107
|
|
« Ответ #29 : Май 01, 2008, 08:37:53 » |
|
С++Builder этот код запускает. И TC 3.11 тоже. ВизуалСтудии под рукой сейчас нет, но, думаю она тоже запустит. Ну значит это просто глюк Борланда
|
|
|
Записан
|
|
|
|
|