Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2010, 13:06   #1
kefir
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 13
По умолчанию C++ - выход за пределы массива

Доброго времени суток.
Я столкнулся с одной штукой, которую сам объяснить не могу, поэтому прошу вас.

Код:
char arr[5];
strcpy(arr, "1234567");
printf(arr);
То есть,
Имеется массив arr с определённым размером.
Далее ему присваивается значение, которое на два символа (!) превышает возможную длину. Я понимаю, если бы вызвалось исключение, или часть просто бы отсеклась. Но ничего этого не происходит, и на третьей строчке кода на экран прекрасно выводится строка "1234567".

Буду благодарен, если мне объяснят, в чём же тут дело.

Последний раз редактировалось kefir; 12.06.2010 в 13:10.
kefir вне форума Ответить с цитированием
Старый 12.06.2010, 13:09   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

переполнение буфера...грозит повреждением данных на которые будет наложено лишнее.(в С++ надо следить за этим)
а вы обьявите её глобально(переменную) и посмотрите тогда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2010, 13:18   #3
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию

когда то в своё время поднимал вопрос о перераспределение памяти строковых массивов
http://programmersforum.ru/showthrea...755#post251755
может что и для себя найдёте
slips вне форума Ответить с цитированием
Старый 12.06.2010, 13:28   #4
kefir
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 13
По умолчанию

Дело в том, что за несколько лет программирования на Delphi у меня появилась привычка - при переполнении буфера я жду, что вылезет exception. Так вот, обработка этого исключения отключена в настройках компилятора, или же переполнение буфера не является исключением? Использую Borland C++.
kefir вне форума Ответить с цитированием
Старый 12.06.2010, 13:39   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от kefir Посмотреть сообщение
Дело в том, что за несколько лет программирования на Delphi у меня появилась привычка - при переполнении буфера я жду, что вылезет exception. Так вот, обработка этого исключения отключена в настройках компилятора, или же переполнение буфера не является исключением? Использую Borland C++.
Именно за отсутствие проверки на границы массива многие и ругают C/C++, мол небезопасно. AV вылетит, если Вы попытаетесь записать больше, в этот раз Вам повезло за счёт выравнивания - в стеке выделилось не 5 байт, а, например 8 или 12
netrino вне форума Ответить с цитированием
Старый 12.06.2010, 14:09   #6
kefir
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 13
По умолчанию

Вопросы отпали, Пепел Феникса, slips, netrino, огромное вам спасибо!
kefir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ASP // Запись ячейки БД за пределы гридов Veiron Общие вопросы .NET 3 10.06.2010 18:14
Как определить выход курсора за пределы объекта Image Дамир Общие вопросы Delphi 7 29.03.2009 21:59
точка не должна выходить за пределы треугольника Брутальный М. Паскаль, Turbo Pascal, PascalABC.NET 8 23.12.2008 07:39
Пределы экрана Манжосов Денис :) Общие вопросы Delphi 6 01.05.2008 10:58