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

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

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

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

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

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

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

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

Зашита от неправильного ввода - C++
Здравствуйте! Подскажите пожалуйста как ограничить возможность ввода ? Ну к примеру мне нужно вводить всего 2 символа 'y' и 'n' остальные...

Защита от неправильного ввода - C++
Приветствую, делаю контрольную работу по программированию, основное задание сделал, но вот решил добавить защиту от неправильного ввода, но...

Как защититься от неправильного ввода - C++
#include<iostream> using namespace std; int main(){ setlocale(LC_ALL,"Rus"); const int N=5; int i=0; int x,y,ch; char...

Защитить массив от неправильного ввода - C++
Вот немного не корректно работает, подскажите как сделать правильно. Нужно так, если в массив вводя число прописью то он выбивал ошибку ну...

Обработка ошибок неправильного заполнения структуры tm? - C++
Это простой вопрос. Допустим такой код: void main(){ int day=31, mon=5,year=82; time_t seconds = time(NULL); tm* timeinfo =...

Обработка двумерного массива. Защита от неправильного ввода - C++
Заполнить двумерный массив размерности n*m с клавиатуры только числами кратными 3, предусмотрев защиту элементов этого массива от...

14
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,274
Записей в блоге: 2
Завершенные тесты: 1
31.12.2010, 17:58 #2
Такие "ошибки" на практике встречаются очень часто, не бойтесь, к краху Винды это не приведет) Современные Windows'ы (про другие ОС не знаю) умеют обрабатывать подобные ситуации, и просто не дадут записать, что-то туда, куда не следует). А вот в старых ОС Windows (по моему до Windows 95 или 98) такой код мог вполне повлиять на работу системы.
1
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.12.2010, 18:00 #3
Не беспокойтесь, если и может затереться что-то важное в памяти, то вероятность крайне мала. Максимум, что вы можете ожидать - программа закроется с Run-Time Error. Если не прав, конечно, поправьте, но сколько я в своей жизни выходил за границы массива (да простит меня Страуструп), это никогда не вешало систему.

Добавлено через 1 минуту
Да, вроде в 95 винде можно было творить чудеса с помощью корявых рук)))
1
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.12.2010, 19:52 #4
Цитата Сообщение от Busine2009 Посмотреть сообщение
Возможно ли предотвращение этой ошибки в Borland
в древнем Туро С++ 3.1 - НЕТ, но даже если такое и произойдет то это никак не повлияет на саму винду(кроме как уже говорилось 95, 98), максимум Турбо закроется и пропадет несохраненный код.
1
Busine2009
Заблокирован
31.12.2010, 20:09  [ТС] #5
У меня Borland C++ Builder 6.
Windows XP Professional.
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
31.12.2010, 21:14 #6
Цитата Сообщение от Busine2009 Посмотреть сообщение
В худшем же случае произойдёт крах программы, а возможно даже и Windows.
Крах программы вполне ожидаем, а вот чтобы виндовс навернуть эт перебор. Все программы под виндой выполняются кажая в своем адресном пространстве и игрой с указателями выйти за это пространство не возможно.
0
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
31.12.2010, 21:22 #7
Обычно, если по тому адресу ничего особенного не находится, но и ничего не произойдет. Если там память другого приложения, то будет run-time error
0
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,280
Завершенные тесты: 1
31.12.2010, 22:03 #8
Люди,вот не знаю...я когда открывал свою программу(ехе) и после того как закрывал ее,весь комп зависал...даже когда нажимал на Num Lock, свет не пропадал на клаве...
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.12.2010, 22:50 #9
^Tecktonik_KiLLeR, хреновая программа
0
Kastaneda
01.01.2011, 10:00
  #10

Не по теме:

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

0
silent_1991
01.01.2011, 10:02
  #11

Не по теме:

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

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

Не по теме:

silent_1991, ага

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

Так, а теперь если не побеспокоиться о том, чтобы по окончании прога освобождала ресурсы, то ось, конечно, по окончании процесса сама их освободит, но когдааааа это будет ещё. И происходит: процесс убиен, а ресурсы (тем более, если очень много занято, как у меня, к примеру было) только-только освобождаются и все остальные проги тормозят.
0
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,280
Завершенные тесты: 1
01.01.2011, 17:41 #15
kravam, кода уже нет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2011, 17:41
Привет! Вот еще темы с ответами:

Найти площадь вписанного в окружность радиуса R неправильного 10-угольника - C++
помогите написть задачу на С++ Найти площадь вписанного в окружность радиуса R неправильного 10-угольника, если его стороны – это хорды,...

Найти площадь вписанного в окружность радиуса R неправильного 10-угольника - C++
помогите написть задачу на С++ Найти площадь вписанного в окружность радиуса R неправильного 10-угольника, если его стороны – это хорды,...

Программа валится из-за неправильного кода, в чем ошибка? - Программирование Android
package com.example.ftmv1; import android.app.Activity; import android.os.Bundle; import android.widget.EditText; import...

Сбой доступа у компьютера домена - Администрирование Windows
Дано: сетка в домене, контроллеров домена два: основной и резервный, на базе Windows Server 2012 Datacenter. Кроме них еще 2 сервера:...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
01.01.2011, 17:41
Ответ Создать тему
Опции темы

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