![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Proger10 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Есть такой код, которым я пытаюсь определить размер массива:
выражение: "Subchunk2Size / ( BitsPerSample / 8 )" - это некоторое значение из переменных. Думаю в этом проблемы быть не может, поэтому не останавливаюсь на объяснении каждой переменной. Выводит этот код вот что:
Получается он определяет мне размер массива Data как - 2 элемента, в то время когда туда загружено 106 тысяч элементов) А как бы определить покорректнее размер?) Такой вариант, которым я 106 тысяч определил - хороший конечно, но такой трюк не везде удасться в проекте использовать ![]() |
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
sizeof(Data)==sizeof(size_t)
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Proger10 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Чего чего?
![]() |
|||
|
||||
Sosed |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.8.2009 Репутация: 1 Всего: 1 |
sizeof(Data)==sizeof(short)
sizeof возвращает размер указателя Data, равный 2 байтам если динамический массив то таскай размер с собой int size = Subchunk2Size / ( BitsPerSample / 8 ); Это сообщение отредактировал(а) Sosed - 13.6.2010, 23:45 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Уважаемые наркоманы, переставайте курить план и садитесь за учебники. Размер указателя любого типа кроме указателей на член класса равен размеру size_t. На x86 это 4 байта.
Закономерно равняется двум, ИЧСХ упорно распечатывается printf-ом. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Proger10
используй std::vector раз уж пишешь на C++. |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Alca, это для массива, а не для указателя на массив.
|
|||
|
||||
Proger10 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
А через указатель можно ли как-то узнать размер массива? Я пробовал через:
Оно вообще еденицу возвращает ![]() А как доступиться до самого массива-то? Пока так и таскаю за собой размер массива в переменной, что не очень удобно. Код не мой, переписывать на std::vector пока не много желания.. |
||||
|
|||||
toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
нет нельзя |
|||
|
||||
Proger10 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Т.е. выхода иного получается нет, кроме как таскать за собой это число в переменной? ![]() (ну или использования std::vector) |
||||
|
|||||
toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Proger10
насколько мне известно, в векторе так и сделано(в классе существует отдельные переменные, которые отвечает за фактический размер и текущий размер capacity, size) |
|||
|
||||
bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
У вектора есть минимум 3 приватных указателя (в принципе, можно извратиться и использовать только два, но тогда capacity всегда будет равен size). Первый указывает на начало области данных, второй на первую свободную ячейку этой области, третий - на следующую за концом области ячейку. Таким образом: size() = ptr2 - ptr1 capacity() = ptr3 - ptr1 empty() = ptr1 == ptr2 end() = ptr2 begin() = ptr1 ... Добавлено через 2 минуты и 16 секунд
тогда уж так:
|
||||||||
|
|||||||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
в 0 байте храни размер массива, с 1 по 255 байты храни сами данные, это будет аналог массива в паскале.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |