|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|||||||||||
Предельный размер списка типа vector13.01.2016, 13:56. Показов 2311. Ответов 21
Метки нет (Все метки)
В программе возникает ошибка, которую не могу понять.
Есть двухмерный массив данных
Таких одномерных векторов я создаю 32768 штук. То есть последний элемент моего двухмерного массива имеет такую индексацию
А вот на следующем шаге проблема. Мне нужно одномерные массивы составлять из 16-ти значений и должно быть таких массивов вдвое больше предыдущего шага - 65536 штук. Программа закрывается с ошибкой. В режиме отладки вот такой текст ошибки:
0
|
|||||||||||
| 13.01.2016, 13:56 | |
|
Ответы с готовыми решениями:
21
Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? |
|
Супер-модератор
|
||||||
| 13.01.2016, 14:41 | ||||||
|
Очень странно.
1
|
||||||
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|
| 13.01.2016, 15:54 [ТС] | |
|
Хм. Если просто задать такой двухмерный массив, то он, вроде, заполняется нормально. А в рамках моей программы - нет. Во вложении моя тестовая программка, которая составляет всевозможные комбинации произвольного количества элементов. То есть например есть 3 элемента, у них могут быть следующие комбинации:
1,1,1 0,1,1 1,0,1 1,1,0 0,0,1 0,1,0 1,0,0 0,0,0 Здесь "1" означает - элемент присутствует в комбинации, "0" - отсутствует. Когда задаю 15 элементов - программа обрабатывает, а 16 - уже нет. Код, наверное, сложный для понимания, но может у вас получится легко найти принципиальную ошибку?
0
|
|
|
Супер-модератор
|
|
| 13.01.2016, 16:14 | |
|
А на кой весь этот код вообще? Что, запустить цикл от 2n-1 до 0, преобразовать каждое число в двоичную запись и вывести в Memo с запятой между значениями разрядов - очень сложно?
0
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|
| 13.01.2016, 16:41 [ТС] | |
|
0
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|
| 13.01.2016, 17:58 [ТС] | |
|
Нет, в векторах 0 и 1 это только в тестовом примере, который я сделал для отработки алгоритма создания всевозможных сочетаний произвольного количества элементов. В реальности же программа будет оперировать пользовательскими типами и там, где тестовая задача заносит в список 0 - будут выполняться определенные действия и в vector будет заноситься динамически созданный объект пользовательского типа. Так же и вместо 1-цы будет пользовательский объект.
По моему коду сложно разобраться в ошибке? Там само наполнение векторов происходит в функции CreateCombination, где в цикле происходит пробежка по всем элементом и сравнение их значений с элементами вектора indices, в котором содержатся индексы элементов, которым назначается значение 0 в составляемой комбинации. Я так думаю, что именно здесь происходит переполнение то ли вектора, то ли еще чего-то... ведь текст ошибки говорит именно о переполнении?
0
|
|
|
Супер-модератор
|
|
| 13.01.2016, 18:16 | |
|
Текст говорит о переполнении стека, что ж ты хотел с такой вложенностью рекурсии. Можно попробовать увеличить размер стека в настройках опций проекта:
Так уже работает для 16-ти.
1
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|
| 13.01.2016, 18:33 [ТС] | |
|
Да. А для 17-ти - уже нет. А почему стек переполняется? Как на это влияют рекурсивные функции? И можно ли значительно увеличивать максимальный размер стека по сравнению со значением по умолчанию (0х00100000)?
0
|
|
|
Супер-модератор
|
|||
| 13.01.2016, 18:48 | |||
|
0
|
|||
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|||||||
| 13.01.2016, 19:07 [ТС] | |||||||
|
Добавлено через 12 минут Может быть у меня основная идея с рекурсией неудачная? Вот как бы выглядел цикл составления комбинаций из count элементов, где в разных вариантах три элемента имеют значение 0, а все остальные 1.
0
|
|||||||
|
Супер-модератор
|
|
| 13.01.2016, 19:24 | |
|
Есть. Тебе столько памяти ОС не даст. Максимум, на что ты можешь рассчитывать в 32-битной ОС - это на общую память в 1.7Gb. Сюда входят все статические данные (глобальные переменные), динамические данные (куча) и стек. В 64-х битах с динамическими данными получше (там уже ограничение в 8 терабайт), но статические данные и стек по-прежнему ограничены 2-мя гигабайтами. Так что даже в 64-битах максимум, что ты сможешь получить - это 2Gb стека.
1
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|
| 25.01.2016, 12:56 [ТС] | |
|
Я изменил рекурсивную функцию. Она стала проще и теперь позволяет обрабатывать 22 элемента из которых составляется 4 164 304 комбинаций. На следующем шаге должно быть 23 элемента и вдвое больше комбинаций, но программа выдает ошибку "External exception EEFFACE". Что означает эта ошибка?
Попробовал просто заполнить двухмерный массив (вектор из 8 388 608 векторов по 23 значений типа int в каждом) - получил ту же самую ошибку. Значит дело не в рекурсивной функции и переполнении стека. Может все-таки достигнут предельный размер списка типа vector?
0
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|
| 25.01.2016, 13:02 [ТС] | |
|
Если запустить программу в режиме отладки, то возникает другая ошибка (см. вложение).
0
|
|
|
|
|
| 25.01.2016, 16:00 | |
|
Это как раз памяти не хватает, можешь попробовать использовать дек или список они не требуют сплошного куска памяти.
std::vector::max_size()
0
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|||
| 25.01.2016, 16:54 [ТС] | |||
|
Добавлено через 3 минуты
0
|
|||
|
|
||||||||||
| 25.01.2016, 17:24 | ||||||||||
|
Добавлено через 50 секунд Добавлено через 3 минуты Добавлено через 45 секунд Добавлено через 9 минут volvo тебе объяснил какой размер оперативки приблизительно тебе может быть доступен, соответственно бери калькулятор и считай байты:
0
|
||||||||||
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
||
| 25.01.2016, 18:49 [ТС] | ||
|
Попутный вопрос. Можно ли как-то контролировать выделение памяти вектором? Чтобы экономично расходовать память.
0
|
||
| 25.01.2016, 18:49 | |
|
Помогаю со студенческими работами здесь
20
Не удаётся создать безымянный объект типа vector моего типа Как изменять размер std::vector<std::vector>? размер vector'a Vector.insert ругается на размер Какой максимальный размер vector? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|