Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Busine2009
Заблокирован
#1

Сбой компьютера от неправильного кода С++ - C++

31.12.2010, 17:43. Просмотров 816. Ответов 14
Метки нет (Все метки)

Читал книгу про массивы в С++ и вот что вычитал:

Вы должны соблюдать осторожность, чтобы не выйти за верхнюю границу массива. Одним из мощных средств С++ является прямой доступ к памяти. В силу этого С++ не запрещает запись в любой участок памяти, даже если эту память не предполагалось использовать в процессе выполнения программы. Следующим код вполне допустим, но он приведёт к краху вашей программы (или Windows):
C++
1
2
int array[5];
array[5] = 10;
Это распространённая ошибка: вы полагаете, что последний элемент массива 5, тогда как на самом деле это 4. При выходе за границу массива вы не сможете узнать, какой участок памяти был изменён, и в лучшем случае результат будет непредсказуемым. В худшем же случае произойдёт крах программы, а возможно даже и Windows. Ошибку такого типа бывает трудно обнаружить, посколько часто к изменённому участку памяти долгое время не происходит обращения, и крах наступает гороздо позже (оставляя вас недоумевать, что же случилось).

У меня такие вопросы:
  1. Действительно может произойти сбой Windows?
  2. Возможно ли предотвращение этой ошибки в Borland (после прочтения этого текста, нет желания проверять это на практике)?
  3. Кто-нибудь сталкивался с такой ошибкой в своей практике и какие были последствия?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2010, 17:43     Сбой компьютера от неправильного кода С++
Посмотрите здесь:

C++ сбой в работе программы
C++ Обработка ошибок неправильного заполнения структуры tm?
Написать программу проверки знания даты основания Санкт-Петербурга. В случае неправильного ответа пользователя, программа должна выводить правильный о C++
Защитить массив от неправильного ввода C++
C++ Найти площадь вписанного в окружность радиуса R неправильного 10-угольника
C++ Найти площадь вписанного в окружность радиуса R неправильного 10-угольника
Зашита от неправильного ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4259 / 2791 / 219
Регистрация: 12.12.2009
Сообщений: 7,119
Записей в блоге: 1
Завершенные тесты: 1
31.12.2010, 17:58     Сбой компьютера от неправильного кода С++ #2
Такие "ошибки" на практике встречаются очень часто, не бойтесь, к краху Винды это не приведет) Современные Windows'ы (про другие ОС не знаю) умеют обрабатывать подобные ситуации, и просто не дадут записать, что-то туда, куда не следует). А вот в старых ОС Windows (по моему до Windows 95 или 98) такой код мог вполне повлиять на работу системы.
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
31.12.2010, 18:00     Сбой компьютера от неправильного кода С++ #3
Не беспокойтесь, если и может затереться что-то важное в памяти, то вероятность крайне мала. Максимум, что вы можете ожидать - программа закроется с Run-Time Error. Если не прав, конечно, поправьте, но сколько я в своей жизни выходил за границы массива (да простит меня Страуструп), это никогда не вешало систему.

Добавлено через 1 минуту
Да, вроде в 95 винде можно было творить чудеса с помощью корявых рук)))
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.12.2010, 19:52     Сбой компьютера от неправильного кода С++ #4
Цитата Сообщение от Busine2009 Посмотреть сообщение
Возможно ли предотвращение этой ошибки в Borland
в древнем Туро С++ 3.1 - НЕТ, но даже если такое и произойдет то это никак не повлияет на саму винду(кроме как уже говорилось 95, 98), максимум Турбо закроется и пропадет несохраненный код.
Busine2009
Заблокирован
31.12.2010, 20:09  [ТС]     Сбой компьютера от неправильного кода С++ #5
У меня Borland C++ Builder 6.
Windows XP Professional.
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
31.12.2010, 21:14     Сбой компьютера от неправильного кода С++ #6
Цитата Сообщение от Busine2009 Посмотреть сообщение
В худшем же случае произойдёт крах программы, а возможно даже и Windows.
Крах программы вполне ожидаем, а вот чтобы виндовс навернуть эт перебор. Все программы под виндой выполняются кажая в своем адресном пространстве и игрой с указателями выйти за это пространство не возможно.
HIMen
4119 / 1368 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
31.12.2010, 21:22     Сбой компьютера от неправильного кода С++ #7
Обычно, если по тому адресу ничего особенного не находится, но и ничего не произойдет. Если там память другого приложения, то будет run-time error
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
31.12.2010, 22:03     Сбой компьютера от неправильного кода С++ #8
Люди,вот не знаю...я когда открывал свою программу(ехе) и после того как закрывал ее,весь комп зависал...даже когда нажимал на Num Lock, свет не пропадал на клаве...
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
31.12.2010, 22:50     Сбой компьютера от неправильного кода С++ #9
^Tecktonik_KiLLeR, хреновая программа
Kastaneda
01.01.2011, 10:00
  #10

Не по теме:

^Tecktonik_KiLLeR, у меня на днях был случай - программа в вечном цикле (случайно, я не хотел))) устанавливала курсор в определенное место и кликала мышью. У меня на компе постоянно запущена такая вещь - индикатор загрузки ЦП, я сморю ЦП загружен на 100% и при всем желании я ни чего не могу сделать, мышь кликает в одном месте, я ей даже пошевелить не могу)))(спасло переполнене стека в этом цикле, программа рухнула))
Это я к тому, что если при запуске твоей программы система наглухо виснет, это не значит, что ты пару байт не туда, куда надо записал, причина может быть любая)

silent_1991
01.01.2011, 10:02
  #11

Не по теме:

Kastaneda, это твой бот для флэш-игры поработал?

ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
01.01.2011, 10:14     Сбой компьютера от неправильного кода С++ #12
C++
1
Действительно может произойти сбой Windows?
Может, если писать код на уровне ядра ОС (драйвера к примеру).
Цитата Сообщение от Busine2009 Посмотреть сообщение
Возможно ли предотвращение этой ошибки в Borland (после прочтения этого текста, нет желания проверять это на практике)?
Можно написать свой класс для массивов и в нем контролировать доступ..
Kastaneda
01.01.2011, 10:40
  #13

Не по теме:

silent_1991, ага

kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
01.01.2011, 14:29     Сбой компьютера от неправильного кода С++ #14
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
Люди,вот не знаю...я когда открывал свою программу(ехе) и после того как закрывал ее,весь комп зависал...даже когда нажимал на Num Lock, свет не пропадал на клаве...
Мечтаю грохнуть ось
Автор, дай код пожалуйста!
...А вообще я где-то чуть меньше года назад сталкивался с похожей ситуацией, но вроде разобрался. Там, короче прога работала-работала и чё-то всё остальное тормозило к матери. Но это я разобрался потом, отчего. Это оттого, что очень много занимал оперативной памяти. Пришлось вручную её увеличивать (файл подкачки или как его там), лезть в настройки винды.

Так, а теперь если не побеспокоиться о том, чтобы по окончании прога освобождала ресурсы, то ось, конечно, по окончании процесса сама их освободит, но когдааааа это будет ещё. И происходит: процесс убиен, а ресурсы (тем более, если очень много занято, как у меня, к примеру было) только-только освобождаются и все остальные проги тормозят.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2011, 17:41     Сбой компьютера от неправильного кода С++
Еще ссылки по теме:

C++ Сбой при преобразовании в coff
C++ Как защититься от неправильного ввода
Сбой работы программы на Windows 10 C++
Обработка двумерного массива. Защита от неправильного ввода C++
C++ Защита от неправильного ввода

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
01.01.2011, 17:41     Сбой компьютера от неправильного кода С++ #15
kravam, кода уже нет.
Yandex
Объявления
01.01.2011, 17:41     Сбой компьютера от неправильного кода С++
Ответ Создать тему
Опции темы

Текущее время: 06:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru