Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/20: Рейтинг темы: голосов - 20, средняя оценка - 4.95
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
#1

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

13.03.2013, 00:15. Просмотров 3620. Ответов 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]; сразу выводят ошибку, причем в обоих случая изменение типа элементов массива ничего не меняет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 00:15
Ответы с готовыми решениями:

Создать с помощью new динамический массив с указанным количеством элементов
Так как пока что я учусь самостоятельно у меня нету проверяющего, поэтому прошу...

Применение массивов случайных чисел с большим количеством элементов
Само задание: Создайте две функции для решения одной и той же задачи:...

Реализовать обработку и файловую запись/чтение массива с большим количеством элементов
такую задачу поставили... имеется 600 000 элементов. Каждому элементу присвоить...

Строки матрицы, с большим количеством положительных элементов расположить выше остальных
В массиве А(N,M) расположить строки так, чтобы сначала шли строки, у которых...

Удалить строку с самым большим количеством слов
помогите написать программу: "Удалить строку с самым большим количеством слов"...

61
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 00:39 #2
Ну если со массивами на стеке всё понятно (стек обычно не шибко больших размеров, 4-8 мегабайт), то почему у вас динамическое выделение памяти ломается уже на 200 килобайтах — не знаю... Вы не на калькуляторе это запускаете часом? о_о Попробуйте объявить массив глобальной переменной что ли.
0
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];
//...
то не сработал фокус.
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 01:00 #4
Статический массив глобальным. Тут-то нечему будет ломаться.
0
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 01:14  [ТС] #5
Тогда появляется вторая проблема (если считать эту решенной) - параллельно создается двумерный массив типа bool (был динамический). Если его так же обьявить статическим глобальным 10000 на 10000, то появляется ошибка size of array is too large.
0
ValeryS
Модератор
7170 / 5437 / 674
Регистрация: 14.02.2011
Сообщений: 18,370
13.03.2013, 01:29 #6
Цитата Сообщение от luck Посмотреть сообщение
Если его так же обьявить статическим глобальным 10000 на 10000, то появляется ошибка size of array is too large.
ну дак 100 000 000 байт однако

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

Добавлено через 14 минут
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
0
Avazart
Эксперт С++
7706 / 5615 / 545
Регистрация: 10.12.2010
Сообщений: 25,211
Записей в блоге: 17
13.03.2013, 01:50 #8
Цитата Сообщение от luck Посмотреть сообщение
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Никакого кроме названия...

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

А вообще я не пойму твоих проблем...
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
13.03.2013, 01:55 #9
Цитата Сообщение от luck Посмотреть сообщение
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Минимальная адресуемая единица - байт. К слову, sizeof выдаёт размер в char'ах, а не байтах (хотя char скорей всего - один байт). Смысл, внезапно, в представлении булева значения. Можно им не пользоваться, если не нравиться, в С вон его нет, и ничего.
0
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.
0
Avazart
Эксперт С++
7706 / 5615 / 545
Регистрация: 10.12.2010
Сообщений: 25,211
Записей в блоге: 17
13.03.2013, 02:00 #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно им не пользоваться, если не нравиться, в С вон его нет, и ничего.
Вообще то пользоваться им нужно, для ясности... но не в этом случае...

Добавлено через 2 минуты
luck, а чем std::vector<int> не угодил или тот же дин массив ?
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
13.03.2013, 02:26 #12
Цитата Сообщение от luck Посмотреть сообщение
двумерный массив 10^5 на 10^5 типа bool
Даже если упаковать каждое значение в один бит, то это ~1Gb.
0
ValeryS
Модератор
7170 / 5437 / 674
Регистрация: 14.02.2011
Сообщений: 18,370
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 бит
1
gray_fox
13.03.2013, 02:40
  #14

Не по теме:

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

0
ValeryS
Модератор
7170 / 5437 / 674
Регистрация: 14.02.2011
Сообщений: 18,370
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];
все нормально отработало
смотри где раньше с памятью косячишь
0
Avazart
Эксперт С++
7706 / 5615 / 545
Регистрация: 10.12.2010
Сообщений: 25,211
Записей в блоге: 17
13.03.2013, 02:50 #16
Цитата Сообщение от ValeryS Посмотреть сообщение
unsigned long long* tst1=new unsigned long long[1000000];
Это может работать от случая к случаю...
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 02:51 #17
Почему? 8 мегабайт — это я не знаю, как надо усиленно загадить кучу перед этим, чтобы оно работало от случая к случаю.
0
ValeryS
Модератор
7170 / 5437 / 674
Регистрация: 14.02.2011
Сообщений: 18,370
13.03.2013, 02:51 #18
Цитата Сообщение от Avazart Посмотреть сообщение
Это будет работать от случая к случаю...
если нет утечки и память не фрагментируется постоянными new delete то почему бы и нет
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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>);
если нет - то, видать, не судьба...
0
Avazart
Эксперт С++
7706 / 5615 / 545
Регистрация: 10.12.2010
Сообщений: 25,211
Записей в блоге: 17
13.03.2013, 02:54 #20
Цитата Сообщение от ValeryS Посмотреть сообщение
если нет утечки и память не фрагментируется постоянными new delete то почему бы и нет
А если есть фрагментация ... + малое количество оперативки ...+ куча процессов жруших память
0
13.03.2013, 02:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 02:54

Алгоритм быстрой сортировки не работает с большим количеством чисел
Требовалось написать программу с алгоритмами сортировки, затем сравнить эти...

Определить номер строки матрицы с наиболее большим количеством нулей
с помощью датчика случайных чисел заполнить двоичную матрицу 5 10. определить...

Задан массив с количеством элементов n
Задан массив с количеством элементов n.Сформировать 2 массива:в 1 включить...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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