![]() |
|
Модераторы: bsa |
![]()
|
|
| M9IC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.12.2007 Репутация: нет Всего: нет |
Подскажите что не так ? сдыхает на последней строке:
|
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
В твоем коде 2 ошибки:
1. memset( szBuf1, 0, sizeof( szBuf1 ) ); Очистится только первые 2 байта, т.к. sizeof( szBuf1 ) вернет 2. 2. memset( szBuf3, 0, sizeof( szBuf3 ) ); Здесь ты записываешь 2 байта в область памяти размером 1 байт -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Estranged |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
На практике указатель будет иметь размер 2, 16-разрядной системе (если вы можете найти), 4 на 32-разрядной системе и 8 на 64-разрядной системе. Поэтому memset чистит всегда 2 или 4, или 8 байт. Что в любом случае приводит к Buffer Overflow для третьего случая, где памяти всего 1 байт запрошено. Что и приводит к ошибке, т.к. в отладочной версии есть контроль на подобные вещи для динамической памяти.
Это сообщение отредактировал(а) Estranged - 21.9.2010, 14:32 |
|||
|
||||
| M9IC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.12.2007 Репутация: нет Всего: нет |
Что-то запутался с sizeof()
1. Почему в первом варианте возвращается размер 4 ? Получается возвращается размер указателя, а не массива, как тогда узнать размер массива ? 2. Второй вариант, тут все понятно. 3. А вот тут не понятно: почему же здесь мне возвращается 6, т.е. размер массива, а не указателя на массив, хотя в п.1 мне вернули размер указателя ??? |
|||
|
||||
| Crafty |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 12 Всего: 14 |
Из стандарта С++
|
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Запомни правило: sizeof может показать размер массива только если массив НЕ динамический.
int m_size = sizeof(array)/sizeof(array[0]) -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Лучше запомнить другое правило: sizeof работает во время компиляции программы, в рантайме от него проку ноль.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| M9IC |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.12.2007 Репутация: нет Всего: нет |
А как тогда узнать размер динамического массива ? Есть ли другие варианты, кроме как запомнить кол-во элементов и умножить на размер 1ого элемента ? |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
M9IC, раз уж вы пишите на С++, используйте vector для динамических массивов. Или запоминайте в какой-нибудь переменной, или впихивайте размер в саму выделенную область памяти. Предложения расположены в порядке увеличения идиотизма:).
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |