КИТА unofficial

Ваши интересы => Викторины и конкурсы => Тема начата: vimmax от Апрель 16, 2008, 02:36:44



Название: Искусство программирования (задача 13)
Отправлено: vimmax от Апрель 16, 2008, 02:36:44
Напишите программу на С (С++) которая вылетит с эксцепшеном.
Программа должна быть минимального размера.


Название: Re: Искусство программирования (задача 13)
Отправлено: naxellar от Апрель 16, 2008, 02:55:33
Код: (cpp)
void main() {
int* z = z;
}


Название: Re: Искусство программирования (задача 13)
Отправлено: Alder от Апрель 16, 2008, 03:00:58
Код: (c)
int main(int argc, char* argv[])
{
int *f;
return *f;
}

Код Некса короче :)


Название: Re: Искусство программирования (задача 13)
Отправлено: vimmax от Апрель 16, 2008, 04:00:38
naxellar отрабатывает нормально в VC6, без ошибок.
Alder прерывается с ошибкой, но надо еще меньше кода.


Название: Re: Искусство программирования (задача 13)
Отправлено: EvilMax от Апрель 16, 2008, 05:58:15
Код: (c)
void main() {
  *(int*)0 = 1;
}


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


Название: Re: Искусство программирования (задача 13)
Отправлено: Sochin от Апрель 16, 2008, 06:09:28
В языке С нет исключений.

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


Название: Re: Искусство программирования (задача 13)
Отправлено: EvilMax от Апрель 16, 2008, 06:37:52
В языке С нет исключений.
Ясное дело. Но по формулировке вопроса и комментариям vimmax я понял, что нужно добиться аварийного завершения программы.

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


Название: Re: Искусство программирования (задача 13)
Отправлено: naxellar от Апрель 17, 2008, 01:08:16
vimmax, я в VS2008 пробовал. Компилятор не указывали, значит текущий, значит мой :P ибо устревшее не катит. ;)


Название: Re: Искусство программирования (задача 13)
Отправлено: LazarusLong от Апрель 17, 2008, 01:26:27
naxellar, вот именно, раз компилятор не оговоривался, то речь шла именно о языке С++, значит ориентироваться нужно не на какой-либо компилятор, а на стандарт языка С++.


Название: Re: Искусство программирования (задача 13)
Отправлено: naxellar от Апрель 17, 2008, 01:51:03
LazarusLong, дык стандарт не описывает, где возникнет исключение, где программа вылетит... Все зависит от того, как понимает код компилятор.


Название: Re: Искусство программирования (задача 13)
Отправлено: Артем от Апрель 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 рулит !  :P


Название: Re: Искусство программирования (задача 13)
Отправлено: LazarusLong от Апрель 17, 2008, 09:27:44
Гарантированно вызовет исключение лишь код Sochin'a )))


Название: Re: Искусство программирования (задача 13)
Отправлено: EvilMax от Апрель 17, 2008, 11:48:35
artem90, угу, ибо ДОСу по барабану доступ к памяти, которую не отвели. На самом деле, даже если спорить о формулировке условия задачи, код Sochin'a самый короткий.


Название: Re: Искусство программирования (задача 13)
Отправлено: vimmax от Апрель 17, 2008, 04:48:19
Sochin чисто программистский код) нормально.
только у меня другой вариант.
Кто догадается?
у меня вываливается с Stack overflow


Название: Re: Искусство программирования (задача 13)
Отправлено: LazarusLong от Апрель 17, 2008, 05:46:57
Под рукой компилятора никакого нет, но в голову почему-то лезет всякий бред типа

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


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

Онлайн-компилятор (http://www.interstron.ru/text.asp?id=2102) откомпилил без ошибок, а при запуске программа вылетела ))))

Цитировать
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


Название: Re: Искусство программирования (задача 13)
Отправлено: vimmax от Апрель 17, 2008, 06:12:51
LazarusLong угу, точно, у меня такой ответ.
Только не знаю кому ставить +1 теперь.



Название: Re: Искусство программирования (задача 13)
Отправлено: Alder от Апрель 17, 2008, 06:17:10
vimmax, считай посимвольно :)


Название: Re: Искусство программирования (задача 13)
Отправлено: Fr0sT от Апрель 17, 2008, 06:19:32
А вот Builder 6 не компилит этот код
Цитировать
[C++ Error] File1.cpp(2): E2120 Cannot call 'main' from within the program


Название: Re: Искусство программирования (задача 13)
Отправлено: Alder от Апрель 17, 2008, 06:22:25
vimmax, думаю задачу стоит усложнить - код должен вываливаться как минимум в 3 разных компилерах - BC 3.1, Builder6, MS VC++.


Название: Re: Искусство программирования (задача 13)
Отправлено: EvilMax от Апрель 17, 2008, 07:14:44
Код: (c)
void main() {
char a[10000000L];
}

Stack overflow :D


Название: Re: Искусство программирования (задача 13)
Отправлено: Артем от Апрель 17, 2008, 07:26:54
void main() {
char a[10000000L];
}

Stack overflow
А в BC 3.11 такое даже "строгий :)" компилятор не пропускает:  "Array size too large"  :D



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


Название: Re: Искусство программирования (задача 13)
Отправлено: vimmax от Апрель 21, 2008, 07:16:32
Sochin +1. Его ответ более всего удовлетворяет условию задачи.


Название: Re: Искусство программирования (задача 13)
Отправлено: Артем от Май 01, 2008, 11:27:58
С таким кодом вываливается даже 3.11-ый  :D
Код: (cpp)
class A
  {
    A(int a=1);
    friend void b() { }
  };


Название: Re: Искусство программирования (задача 13)
Отправлено: LazarusLong от Май 01, 2008, 12:27:46
artem90, Билдер и BC 3.11 нормально скомпилировали и запустили этот код. Если же пытаться объявить объект этого класса, то вполне прогнозируемо программа не компилируется (невозможно вызвать приватный конструктор). Но ошибка компиляции и ошибка времени выплонения - это разные вещи :)


Название: Re: Искусство программирования (задача 13)
Отправлено: Артем от Май 01, 2008, 03:22:10
Билдер и BC 3.11 нормально скомпилировали и запустили этот код. Если же пытаться объявить объект этого класса, то вполне прогнозируемо программа не компилируется (невозможно вызвать приватный конструктор)

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


Название: Re: Искусство программирования (задача 13)
Отправлено: LazarusLong от Май 01, 2008, 03:55:46
Ну и все равно:) Ничего криминального в объявлении такого класса нет. Ну ясно что объявление в приватной части класса конструктора по умолчанию и дружественной функции по меньшей мере странно но не смертельно. У тебя прсто функции main() нет. Допиши её и все будет нормально запускаться. Сам по себе такой код не смертелен. Билдер, к примеру, говорит при попытке собрать такой код: Linker error: unresolved external main и программа просто не запускается :)


Название: Re: Искусство программирования (задача 13)
Отправлено: Артем от Май 01, 2008, 07:47:54
У тебя прсто функции main() нет. Допиши её и все будет нормально запускаться.
Хоть с меином, хоть без меина, хоть в ДОСе, хоть в Винде, но этот код 3.11-ый не запустит нигде !!!  :)


Название: Re: Искусство программирования (задача 13)
Отправлено: LazarusLong от Май 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


Название: Re: Искусство программирования (задача 13)
Отправлено: Артем от Май 01, 2008, 08:37:53
С++Builder этот код запускает. И TC 3.11 тоже. ВизуалСтудии под рукой сейчас нет, но, думаю она тоже запустит.
Ну значит это просто глюк Борланда :)