Форум программистов, компьютерный форум CyberForum.ru

Динамический массив с большим количеством элементов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 00:15     Динамический массив с большим количеством элементов #1
Нужно создать динамический массив (каждый элемент целое положительное число до 10^9), который по введенным данным создавал N элементов массива, где N может быть до 10^5.

unsigned long int *arr = new unsigned long int[num];

Я сделал так, но если количество элементов больше 45920, то выводит ошибку
"terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
This application has requested the Runtime to terminate it in unuasual way.
Please contact the application's support team for more information."
IDE Qt Creator.
Статические массивы типа int array[1000000]; сразу выводят ошибку, причем в обоих случая изменение типа элементов массива ничего не меняет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 00:15     Динамический массив с большим количеством элементов
Посмотрите здесь:

динамический массив из элементов структурного типа C++
Массив: определить индекс столбца с максимальным количеством нулевых элементов C++
Задан массив с количеством элементов n C++
Массив с неизвестным заранее количеством элементов C++
C++ Алгоритм быстрой сортировки не работает с большим количеством чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 00:39     Динамический массив с большим количеством элементов #2
Ну если со массивами на стеке всё понятно (стек обычно не шибко больших размеров, 4-8 мегабайт), то почему у вас динамическое выделение памяти ломается уже на 200 килобайтах — не знаю... Вы не на калькуляторе это запускаете часом? о_о Попробуйте объявить массив глобальной переменной что ли.
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 00:52  [ТС]     Динамический массив с большим количеством элементов #3
Машина достаточно серьезная, что б все работало, если бы дело было в этом (плюс на удаленном компе тоже на 226кб работа заканчивалась).
Если я правильно понял, как сделать динамический массив глобальным
C++
1
2
3
4
5
6
7
unsigned long int *arr = 0;
 
int main()
{
//...
    arr = new unsigned long int[num];
//...
то не сработал фокус.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 01:00     Динамический массив с большим количеством элементов #4
Статический массив глобальным. Тут-то нечему будет ломаться.
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 01:14  [ТС]     Динамический массив с большим количеством элементов #5
Тогда появляется вторая проблема (если считать эту решенной) - параллельно создается двумерный массив типа bool (был динамический). Если его так же обьявить статическим глобальным 10000 на 10000, то появляется ошибка size of array is too large.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
13.03.2013, 01:29     Динамический массив с большим количеством элементов #6
Цитата Сообщение от luck Посмотреть сообщение
Если его так же обьявить статическим глобальным 10000 на 10000, то появляется ошибка size of array is too large.
ну дак 100 000 000 байт однако

Добавлено через 1 минуту
Цитата Сообщение от luck Посмотреть сообщение
Нужно создать динамический массив (каждый элемент целое положительное число до 10^9),
тоже 4 гигаБайта
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 01:48  [ТС]     Динамический массив с большим количеством элементов #7
bool это же 1 бит, а не байт?
Есть какое то решение у проблемы?

Добавлено через 14 минут
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
13.03.2013, 01:50     Динамический массив с большим количеством элементов #8
Цитата Сообщение от luck Посмотреть сообщение
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Никакого кроме названия...

Есть такая штука как biteset<> можно его попробовать...

А вообще я не пойму твоих проблем...
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
13.03.2013, 01:55     Динамический массив с большим количеством элементов #9
Цитата Сообщение от luck Посмотреть сообщение
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Минимальная адресуемая единица - байт. К слову, sizeof выдаёт размер в char'ах, а не байтах (хотя char скорей всего - один байт). Смысл, внезапно, в представлении булева значения. Можно им не пользоваться, если не нравиться, в С вон его нет, и ничего.
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 01:58  [ТС]     Динамический массив с большим количеством элементов #10
Проблема в том - как создать массив из 10000 элементов, каждый из которых принимает значения в диапазоне от 1 до 10^9. Желательно динамический, т к количество элементов может быть как 3, так и 10^5. Этот вопрос решили, хоть и не динамическим образом. Осталось понять, как сделать двумерный массив 10^5 на 10^5 типа bool и желательно, как оба массива задать динамически.
IDE Qt Creator.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
13.03.2013, 02:00     Динамический массив с большим количеством элементов #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно им не пользоваться, если не нравиться, в С вон его нет, и ничего.
Вообще то пользоваться им нужно, для ясности... но не в этом случае...

Добавлено через 2 минуты
luck, а чем std::vector<int> не угодил или тот же дин массив ?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
13.03.2013, 02:26     Динамический массив с большим количеством элементов #12
Цитата Сообщение от luck Посмотреть сообщение
двумерный массив 10^5 на 10^5 типа bool
Даже если упаковать каждое значение в один бит, то это ~1Gb.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
13.03.2013, 02:36     Динамический массив с большим количеством элементов #13
Цитата Сообщение от luck Посмотреть сообщение
массив 10^5 на 10^5 типа bool
Цитата Сообщение от luck Посмотреть сообщение
статическим глобальным 10000 на 10000,
ты уж определись 10^5 или 10^4
Цитата Сообщение от gray_fox Посмотреть сообщение
в char'ах, а не байтах (хотя char скорей всего - один байт).
char это и есть байт минимальная единица
а вот в байте может быть не 8 бит
gray_fox
13.03.2013, 02:40
  #14

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
char это и есть байт минимальная единица
Точно )

ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
13.03.2013, 02:41     Динамический массив с большим количеством элементов #15
Цитата Сообщение от luck Посмотреть сообщение
Проблема в том - как создать массив из 10000 элементов, каждый из которых принимает значения в диапазоне от 1 до 10^9.
только что написал в VS
C++
1
unsigned long* tst=new unsigned long[1000000];
и даже (о ужас)
C++
1
unsigned long long* tst1=new unsigned long long[1000000];
все нормально отработало
смотри где раньше с памятью косячишь
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
13.03.2013, 02:50     Динамический массив с большим количеством элементов #16
Цитата Сообщение от ValeryS Посмотреть сообщение
unsigned long long* tst1=new unsigned long long[1000000];
Это может работать от случая к случаю...
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 02:51     Динамический массив с большим количеством элементов #17
Почему? 8 мегабайт — это я не знаю, как надо усиленно загадить кучу перед этим, чтобы оно работало от случая к случаю.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
13.03.2013, 02:51     Динамический массив с большим количеством элементов #18
Цитата Сообщение от Avazart Посмотреть сообщение
Это будет работать от случая к случаю...
если нет утечки и память не фрагментируется постоянными new delete то почему бы и нет
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
13.03.2013, 02:53     Динамический массив с большим количеством элементов #19
Цитата Сообщение от luck Посмотреть сообщение
сделать двумерный массив 10^5 на 10^5 типа bool
Вообщем попробуй один bitset выделить в куче:
C++
1
std::auto_ptr<std::bitset<1000000000> > bits(new std::bitset<1000000000>);
если нет - то, видать, не судьба...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 02:54     Динамический массив с большим количеством элементов
Еще ссылки по теме:

C++ Динамический массив, удаление и вставка элементов
C++ Применение массивов случайных чисел с большим количеством элементов
Вычислить разность между количеством отрицательных и количеством положительных элементов одномерного массива C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
13.03.2013, 02:54     Динамический массив с большим количеством элементов #20
Цитата Сообщение от ValeryS Посмотреть сообщение
если нет утечки и память не фрагментируется постоянными new delete то почему бы и нет
А если есть фрагментация ... + малое количество оперативки ...+ куча процессов жруших память
Yandex
Объявления
13.03.2013, 02:54     Динамический массив с большим количеством элементов
Ответ Создать тему
Опции темы

Текущее время: 06:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru