Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252

Определить реальный размер массива

11.06.2011, 00:49. Показов 3982. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть структура

C++
1
2
3
4
5
6
7
8
9
10
11
struct vvv
{
        char pp[100];
        char mm[25];
        char cc[3];
        std::string vv;
        std::string bb;
        std::string nn;
        std::vector<dds>dddx;
        int ff;
};
Где dds - тоже структура, состоящая только из string'ов
Далее я создаю массив данной структуры:
C++
1
vvv *massiv = new vvv[500];
И заполняю элементы массива, включая все string'и и vector'а неопределенным количеством элементов.

Теперь такой вопрос, sizeof(massiv) выведет мне реальный размер массива, включая размер всех строк и веторов, илиже она посчитает размер интов и чаров, а у стрингов и векторов только размер указателей?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2011, 00:49
Ответы с готовыми решениями:

Определить размер массива
Дано массив типа int с числами. В нем есть элемент, который равен 0. Мне нужно найти размер этого массива, а точней его конец. Когда я...

Определить размер массива по указателю
Собственно вопрос в следующем: можно ли определить размер выделенного динамически массива по указателю на область памяти? int *ptr =...

Как определить размер массива объявленного в другом модуле?
Возникла необходимость разбить программу на модули, и появилась проблема: Module1.cpp: ... int mas = {1, 2, 3, 4, 5}; ... ...

7
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:00
неужели так сложно взять и проверить????

sizeof(massiv) будет = 4 (размер указателя)

вам нужен sizeof(massiv[0]); или sizeof(vvv);

я тут проверил немного, всегда выводится постоянный размер (что в принципе логично) = сумме всех данных sizeof(int +char*100 + std::string +...)

всякие штуки std::string или std::vector<int> содержат в себе уже набор данных, этот набор будет иметь одинаковый размер! а расширение там проиходит же по указателям (типа push_back()), а размер указателя при этом не изменится!
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 01:08  [ТС]
Проверить не сложно, просто долго, легче спросить здесь у знатаков
Тогда другой вопрос, есть ли может какая-та функция или способ автоматизированного вычисления размера массива с такой..., или даже сложнее, структурой? Просто в моем случае всё перебирать не вариант...
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:19
ну размер одного элемента массива таких структур, как я уже написал, будет постоянный сколько там чего не изменяй, ну а если вам нужны размеры отдельных членов структуры то придется уж их доставать методами типа .size() .length() и тп
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 01:23  [ТС]
Размер stl элементов, таких как вектор и стринг вычисляется функцией size(), у других элементов иначе... при этом там тоже надо считать размер структур.
У меня очень сложная структура массива.... раза в 3 сложнее приведенной мной и элементов очень много. Если вычислять размер каждого элемента и суммировать - выйдет очень большой код анализирующий саму структуру массива и я сомневаюсь что у меня получится сделать это без ошибок...там вектора доходят до сотен тысяч стрингов...
Я знаю что если вызвать delete[] massiv; то для каждого элемента поочередно вызовется деструктор и массив будет последовательно удален, независимо от его сложности. Может быть есть какие-то способы и вычисления размера также, автоматизированно?
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:37
Цитата Сообщение от Union Посмотреть сообщение
Я знаю что если вызвать delete[] massiv; то для каждого элемента поочередно вызовется деструктор и массив будет последовательно удален, независимо от его сложности.
тем не менее , будет же вызван деструктор для каждого данного, значит если у вас там 10+10*10+20+5*40... данных, будет вызвано 100500 деструкторов, и это, я думаю, нормально.

получается что такая "сложность" это нормально!?
если какие-то элементы -структуры/классы - определи для них методы которые покажут их размер, может это поможет не запутатся.

а вообще для чего это?
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
11.06.2011, 01:43  [ТС]
Это для отслеживания занимаемой памяти приложением из самого приложения... Видимо придется писать функцию, спасибо.
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 01:50
понятно, надеюсь у вас выйдет то , что вы хотите сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2011, 01:50
Помогаю со студенческими работами здесь

Можно ли определить размер динамического двумерного массива, количество строк и столбцов?
help

Ввести размер массива с клавиатуры и передать этот размер в конструктор
Я создал массив объектов. И я хочу ввести размер этого массива с клавиатуры, и передать этот размер в конструктор, как мне это сделать? ...

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости
Ребята, подскажите, кто может, каким образом создать функцию с применением динамического массива, но так, чтобы размер массива увеличивался...

Функция, которая удаляет из целочисленного одномерного массива все, и возвращает новый размер массива
Разработать и испытать функцию, которая удаляет из целочисленного одномерного массива все, и возвращает новый размер массива. #include...

Удалить из массива все элементы встречающиеся менее 3-х раз и вывести размер полученного массива и его содержимое.
Помогите пожалуйста решить задачу!!!!!! Дан целочисленный массив размера n. Удалить из массива все элементы встречающиеся менее 3-х...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru