![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| voyageur |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.11.2005 Репутация: нет Всего: нет |
Здравствуйте! Подскажите, пожалуйста, как исправить?
Результат должен быть:
Но при отладке вылазит ошибка Run-Time Check Failure #2 - Stack around the variable 'i2' was corrupted. и результат работы:
использую VS 2005 Это сообщение отредактировал(а) voyageur - 27.2.2009, 16:51 |
||||||
|
|||||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 1 Всего: 9 |
voyageur, кто сказал, что после инкрементирования указателя он будет указывать на другую переменную(i1)? В release версии такое возможно и сработает, но является грязным хаком, так что UB(порча стека) - закономерный результат неправомерных действий.
|
|||
|
||||
| voyageur |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.11.2005 Репутация: нет Всего: нет |
pan2004, это нас в институте такому учат, прям вот как препод на доске написал так и есть. То есть нельзя чтоли таким образом адрес изменять? должно перейти на i1 т.к. в памяти оно хранится перед i2, то есть адрес переменной i2 - 1 будет i1 а если i2 +1 то будет i3. Разве нет?
Это сообщение отредактировал(а) voyageur - 27.2.2009, 19:53 |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 1 Всего: 9 |
Нет. Скорее всего ты не сможешь найти в стандарте места, который оговаривает такое поведение. В дебаг режиме компилятор(VS) судя по всему "окаймляет" каждую стековую переменную специальными метками. Во время выполнения проверяется целостность этих меток, а так как они повреждены(твоим блуждающим указателем), это идентифицируется как stack damage(то же самое касается и "кучи" в режиме дебага). Подобный механизм позволяет в дебаг версии быстро отловить ошибки типа выхода за границы массива. В релиз версии подобные метки ставится не должны, так что твоя программа может даже работать. Но не стоит на это полагаться. В настоящих программах строго рекомендую не пользоваться подобными уловками. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
значит препод баран. Не слушай его в дальнейшем. |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
pan2004, сегодня столкнулся с багом у себя в программе по этой части. компилятор cl (Visual Studio 2008) подобного поведения не заметил. ошибка - обнуление памяти большего размера чем выделено( выделение при помощи оператора new), как проявлялось - bad_alloc exception при последующем выделении памяти. В релиз версии не проверял, но имхо это поведение не похоже на описанное выше. Думаю самостоятельно смогу найти описание данного поведения компилятора на этот счет, но если не сложно, был бы благодарен за ссылку на описание. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| voyageur |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.11.2005 Репутация: нет Всего: нет |
pan2004, спасибо за полный ответ.
mes, нет, такой код нашел в сети: http://it.kgsu.ru/C++/c0018.html пример 3. |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Убивать нужно за такое (творчество). Это сообщение отредактировал(а) cutwater - 28.2.2009, 13:48 |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это сообщение отредактировал(а) mes - 28.2.2009, 11:15 |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |