| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++] Выход за предел массива |
| Автор: Rockie 2.11.2006, 18:07 | ||
Здравствуйте. Просматривал http://forum.vingrad.ru/topic-119405.html с числами Фибоначчи, вспомнил что у самого есть старенькая программа. Запустил и не понял, почему "это работает". Объясните пожалуйста. Компилировал в BC 3.0 и в Билдере.
|
| Автор: Kuvaldis 2.11.2006, 18:20 | ||
Rockie,
Поэтому С++ и называют языком среднего уровня: можно многое, ответственность ложится на программиста. Если не запортить какие-нибудь важные данные, которые записаны прямо за массивом на 2 элемента, то все будет хорошо. Между прочим, Visual C++ тестит подобные ошибки, правда не на этапе компиляции, а как run-time error. Но все же.. Именно поэтому после написания мной программы в Builder я тестирую ее в Visual, так как последний - более строгий |
| Автор: Kuvaldis 2.11.2006, 19:15 | ||
dumb,
Это я сказал слишком общо: имелось в виду, что тестируются блоки, файлы с логикой, т.е. те места, где не используются стандартные операции и GUI и наиболее высока вероятность ошибки (я еще не выжил из ума тестировать программу с VCL в Visual) Сорри за не совсем корректно оформленную мыслю |
| Автор: Alexeis 2.11.2006, 21:29 |
| Модератор: а язык кто укажет в заголовке? |
| Автор: Rockie 2.11.2006, 21:49 |
| Kuvaldis, впнринцыпе за исключением последней функции это чистый Си. Мне было непонятно, почему нет никаких Access violation или подобного.. alexeis1, извиняюсь, забыл что в Центре Помощи |
| Автор: Kuvaldis 2.11.2006, 21:52 |
| Rockie, это не Паскаль Еще один классический пример из этой серии - использование функции gets() Она читает в буфер входную строку до тех пор, пока не будет нажат Enter. И ей абсолютно по барабану, каков реальный размер буфера. И в общем случае при выходе за границу массива нет ни предупреждения, ни ошибки компиляции, ни ошибки времени выполнения Таков С по стандарту. А в Visual уже реализация решения данной проблемы. |