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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
#1

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

13.03.2013, 00:15. Просмотров 2863. Ответов 61
Метки нет (Все метки)

Нужно создать динамический массив (каждый элемент целое положительное число до 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++ Создать с помощью new динамический массив с указанным количеством элементов
C++ Применение массивов случайных чисел с большим количеством элементов
C++ Реализовать обработку и файловую запись/чтение массива с большим количеством элементов
Строки матрицы, с большим количеством положительных элементов расположить выше остальных C++
Удалить строку с самым большим количеством слов C++
C++ Алгоритм быстрой сортировки не работает с большим количеством чисел
Определить номер строки матрицы с наиболее большим количеством нулей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
~ Эврика! ~
1243 / 992 / 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
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,639
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
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
13.03.2013, 01:50     Динамический массив с большим количеством элементов #8
Цитата Сообщение от luck Посмотреть сообщение
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Никакого кроме названия...

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

А вообще я не пойму твоих проблем...
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
13.03.2013, 02:00     Динамический массив с большим количеством элементов #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно им не пользоваться, если не нравиться, в С вон его нет, и ничего.
Вообще то пользоваться им нужно, для ясности... но не в этом случае...

Добавлено через 2 минуты
luck, а чем std::vector<int> не угодил или тот же дин массив ?
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
13.03.2013, 02:26     Динамический массив с большим количеством элементов #12
Цитата Сообщение от luck Посмотреть сообщение
двумерный массив 10^5 на 10^5 типа bool
Даже если упаковать каждое значение в один бит, то это ~1Gb.
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,639
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
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,639
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
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
13.03.2013, 02:50     Динамический массив с большим количеством элементов #16
Цитата Сообщение от ValeryS Посмотреть сообщение
unsigned long long* tst1=new unsigned long long[1000000];
Это может работать от случая к случаю...
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 02:51     Динамический массив с большим количеством элементов #17
Почему? 8 мегабайт — это я не знаю, как надо усиленно загадить кучу перед этим, чтобы оно работало от случая к случаю.
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,639
13.03.2013, 02:51     Динамический массив с большим количеством элементов #18
Цитата Сообщение от Avazart Посмотреть сообщение
Это будет работать от случая к случаю...
если нет утечки и память не фрагментируется постоянными new delete то почему бы и нет
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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++
Задан массив с количеством элементов n C++
Массив с неизвестным заранее количеством элементов C++
Строковый двумерный массив с произвольным количеством элементов C++
C++ Одномерный массив с неизвестным количеством элементов, написание ограничения

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru