Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
green_man
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 24
1

Создать массив из 1 000 000 000 и более элементов, а потом заполнить и вывести его

21.09.2015, 08:18. Просмотров 1006. Ответов 10
Метки нет (Все метки)

создаю массив, и все идет нормально


C
1
2
3
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    unsigned long long n;
 
    unsigned long long *a;
    scanf_s("%llu", &n);
 
    unsigned long long e=n;
 
    a = (unsigned long long*)malloc(n*sizeof(unsigned long long) );
    
    return 0;
}
затем заполняю его и вывожу

C
1
2
3
4
5
6
7
8
9
for (unsigned long long i = 0; i < n; i++)
    {
        a[i] = rand()%20;
    }
 
    for (unsigned long long i = 0; i < n; i++)
    {
        printf("%llu ", a[i]);
    }
и до 100 000 000 все также работает нормально, но для числа побольше, например 1 000 000 000
после a[i] = rand()%20; возникает необработанное исключение

а если убрать заполнение, то с printf("%llu ", a[i]); та же история.

Что я делаю не так?
Как создать массив из 1 000 000 000 и более элементов , а потом заполнить и вывести его?
Буду очень благодарен любым вашим ответам.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2015, 08:18
Ответы с готовыми решениями:

Не получается создать массив в 100 000 элементов
Всем доброго времени суток. Столкнулся с проблемой: не получается создать массив в 100 000...

Создать вещественный массив из 10 000 чисел , заполнить его случайными числами в диапазоне от 0 до 1 . Вычислить
Создать вещественный массив из 10 000 чисел , заполнить его случайными числами в диапазоне от 0 до...

Найти вероятность того,что из 10 000 машин будет не менее 8 000 и не более 8050 исправных
Найти вероятность того,что из 10 000 машин,отправленных с завода,Будет не менее 8 000 и не более...

Как создать 1 000 000 строк без совпадений?
помогите дорогие друзья!!! как создать 1 000 000 строк без совпадений? делаю так private void...

Вывести содержимое 5 000 000 страниц, а парсер останавливается на 400
Значит так проблема состоит в том, что мне нужно вывести содержимое 5 000 000 ов страниц, а парсер...

10
dimabubyakin
160 / 121 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
21.09.2015, 08:47 2
Во первых
C
1
2
3
//for (unsigned long long i = 0; i < n; i++) C++ style
unsigned long long i;
for (i = 0; i < n; i++)
0
green_man
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 24
21.09.2015, 08:50  [ТС] 3
не знаю.. итак же работало, ничего не изменилось.
0
dimabubyakin
160 / 121 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
21.09.2015, 08:54 4
green_man,
C
1
sizeof(unsigned long long); // 8
8*100 000 000 = дофига
дофига / 1024 / 1024 = 762.939453 мб оперативной памяти под массив
Для числа 1 000 000 000 думаю ясно что будет 7.6 гб

Добавлено через 26 секунд
green_man, теперь ясно почему ошибка?
1
21.09.2015, 08:54
green_man
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 24
21.09.2015, 08:57  [ТС] 5
но ведь ошибка после первого вхождения в цикл for()
0
dimabubyakin
160 / 121 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
21.09.2015, 08:58 6
green_man, память мы в массиве заполняем
0
green_man
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 24
21.09.2015, 09:06  [ТС] 7
не понимаю.
Если не писать

C
1
2
3
4
5
6
7
8
9
for (unsigned long long i = 0; i < n; i++)
    {
        a[i] = rand()%20;
    }
 
    for (unsigned long long i = 0; i < n; i++)
    {
        printf("%llu ", a[i]);
    }
то число считывается, a получает адрес.
0
dimabubyakin
160 / 121 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
21.09.2015, 09:07 8
green_man, на практике проверь, у тебя есть "Диспетчер задач")
0
green_man
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 24
21.09.2015, 09:16  [ТС] 9
ну да
0
Evg
Эксперт CАвтор FAQ
20213 / 7773 / 596
Регистрация: 30.03.2009
Сообщений: 21,729
Записей в блоге: 30
21.09.2015, 09:27 10
Лучший ответ Сообщение было отмечено green_man как решение

Решение

Цитата Сообщение от green_man Посмотреть сообщение
после a[i] = rand()%20; возникает необработанное исключение
Потому что a == NULL

Цитата Сообщение от green_man Посмотреть сообщение
Как создать массив из 1 000 000 000 и более элементов , а потом заполнить и вывести его?
Если 32-битная система, то никак. Если 64-битная, то это зависит не от языка, а от ограничений операционной системы. Скорее всего malloc такие размеры не сможет выделить. Если под линуксом, то можно попробовать mmap. По виндой какой-то свой механизм
1
gng
873 / 602 / 186
Регистрация: 08.09.2013
Сообщений: 1,620
22.09.2015, 13:53 11
Цитата Сообщение от Evg Посмотреть сообщение
Скорее всего malloc такие размеры не сможет выделить.
Отчего же, если память + своп больше 8Г, то выделит и заполнит относительно быстро, а за пару месяцев, может быть, даже на экран выведет) :-))). Я о 64-бит Линуксe. Насчет Венды не знаю.
0
22.09.2015, 13:53
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2015, 13:53

Целое значение близкое к 7 000 000 000
Здраствуйте, нашел так называемый проект ейлер с задачами для ищущих=) В общем задача найти самый...

Игровой ПК до 4 000 грн (12 000 -13 000 рублей)
Материнская плата Asus M5A78L-M LX3 Процессор AMD FX-4300 Память Kingston DDR3-1866 4096MB...

Модифицировать программу так, чтобы она решала задачу с 10 000 000 элементов менее чем за минуту
Модифицировать задачу так, чтобы она решала задачу с 10 000 000 элементов менее чем за минуту. ...


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

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

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