Форум программистов, компьютерный форум, киберфорум
Наши страницы
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. Просмотров 861. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2015, 08:18
Ответы с готовыми решениями:

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

Создать массив, заполнить его, затем создать новый массив, заполнить его числами наоборот
То есть например массив {10, 25, 38, 49} А новый массив {94, 83, 52, 10}...

Одномерный массив, состоящий из 5 элементов. Заполнить с клавиатуры и вывести на экран его значения
Привет, знатокам!!! Есть начало программы, нужна оконцовка. Не получается....

Найти натуральное число от 1 до 10 000 с максимальной суммой делителей
Здравствуйте, помогите пожалуйста проверить задачу. Найти натуральное число от...

Создать массив из 200 элементов и заполнить его случайными числами в диапазоне от 40 до 200
Помогите пожалуйста. Спасибо заранее.

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
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
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 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
809 / 553 / 168
Регистрация: 08.09.2013
Сообщений: 1,498
22.09.2015, 13:53 11
Цитата Сообщение от Evg Посмотреть сообщение
Скорее всего malloc такие размеры не сможет выделить.
Отчего же, если память + своп больше 8Г, то выделит и заполнит относительно быстро, а за пару месяцев, может быть, даже на экран выведет) :-))). Я о 64-бит Линуксe. Насчет Венды не знаю.
0
22.09.2015, 13:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2015, 13:53

Создать динамический массив. Заполнить его числами от 1 до n и записать его в файл.
создать динамический массив. Заполнить его числами от 1 до n и записать его в...

Создать массив с параметрами и потом его передать в эту функцию
Есть функция с параметром (char** argv). Мне необходимо создать массив с...

History. Как создать массив строк, как его заполнить, и как производить перебор элементов
Добрый день, мне нужно реализовать некое подобие хистори. Поясню: есть некое...


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

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

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