|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
|||||||||||
Предельный размер списка типа vector13.01.2016, 13:56. Показов 2314. Ответов 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? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|