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

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

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

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

13.03.2013, 00:15. Просмотров 2983. Ответов 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++
такую задачу поставили... имеется 600 000 элементов. Каждому элементу присвоить значение и по 300 000 записать в файл. массив такое...

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

Удалить строку с самым большим количеством слов - 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
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Эксперт С++
7145 / 5322 / 276
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
13.03.2013, 01:50 #8
Цитата Сообщение от luck Посмотреть сообщение
Sizeof выдал 1 байт, но какой тогда смысл в этом bool =\
Никакого кроме названия...

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

А вообще я не пойму твоих проблем...
gray_fox
What a waste!
1507 / 1210 / 68
Регистрация: 21.04.2012
Сообщений: 2,545
Завершенные тесты: 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
Эксперт С++
7145 / 5322 / 276
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
13.03.2013, 02:00 #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно им не пользоваться, если не нравиться, в С вон его нет, и ничего.
Вообще то пользоваться им нужно, для ясности... но не в этом случае...

Добавлено через 2 минуты
luck, а чем std::vector<int> не угодил или тот же дин массив ?
gray_fox
What a waste!
1507 / 1210 / 68
Регистрация: 21.04.2012
Сообщений: 2,545
Завершенные тесты: 3
13.03.2013, 02:26 #12
Цитата Сообщение от luck Посмотреть сообщение
двумерный массив 10^5 на 10^5 типа bool
Даже если упаковать каждое значение в один бит, то это ~1Gb.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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];
все нормально отработало
смотри где раньше с памятью косячишь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 02:41
Привет! Вот еще темы с ответами:

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

Задан массив с количеством элементов n - C++
Задан массив с количеством элементов n.Сформировать 2 массива:в 1 включить элементы исходного массива с чётными номерами,а во 2 с нечётными

Массив с неизвестным количеством элементов - C++
Как задать char массив, количество элементов которого мне неизвестно? Туда может быть записано 10 элементов, а может и 25 или еще больше. ...

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.03.2013, 02:41
Ответ Создать тему
Опции темы

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