![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
georain |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Пишу
выводит 0! Пишу
Выводит 123! Что такое, куда 4 байта делись? |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
это что, С++?
в С/С++ массив нулевого размера объявить нельзя, этим даже пользуются для проверки условий на этапе компиляции Добавлено через 2 минуты и 11 секунд опять-же не должен он выводить 0, p - не должно быть нулевого размера |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
georain,
типичное переполнение буфера программа нормально завершается? если нормально, этому тоже есть объяснение вот, к примеру код
в данном случае изменяется rbp в стеке, а через leave идет его загрузка вполне возможно, что функция окружения, вызвавшая main, не использует rbp (или восстанавливает его значение из другого источника), поэтому программа не падает -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: 1 Всего: 3 |
Тут неопределенность возникает, это уже от компилятора зависит что выведет. У меня на 1-й пример выводит 1 в VS2005.
|
|||
|
||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
У меня так спокойно компилят и выполняют gcc(g++) 4.1 и icc(icpc) 10.0
Причём размер такой структуры 400
Это сообщение отредактировал(а) georain - 1.2.2008, 12:13 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
возможно, используется GNU расширение Добавлено через 49 секунд все верно -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Что-то я ничего не понимаю, всю жизнь считал что в си массивы индексируются с нуля, и в массиве a[100], 101 элемент.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
100 - это количество элементов индексация начинается с нуля ну и как тут может быть 101 элемент? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Так icc точно также компилит, уж intel то IMHO лучше всех должен придерживаться стандартов. Может какие тонкости есть? Добавлено через 2 минуты и 14 секунд
a[0] - первый элемент a[1] - второй элемент ... a[100] - сто первый элемент, разве нет? |
|||
|
||||
Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: 1 Всего: 3 |
Правильно, но a[100] выделяет память на 100 элементов с 0 по 99 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
||||
|
||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
||||
|
||||
TeAnton |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
georain, в С/С++ нет проверки на границы массивов. Можешь написать хоть: p.a[10000]=123. Запишется неизвестно куда, а скорее всего выскочит ошибка сегментации памяти.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |