С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195

Ошибка при создании массива большого размера

28.12.2015, 05:32. Показов 6604. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Массив
C++
1
int m[999999];
выдает ошибку Винды в чем дела? с 5 9-ми все нормально

Добавлено через 19 минут
точнее выше 519999 выдает ошибку при 509999 работает что то среднее стабильное не могу определить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2015, 05:32
Ответы с готовыми решениями:

Ошибка сегментирования (core dumped) при обработке файла большого размера
Поблочно обрабытываю текстовый файл ~1,5 Гб, при достижении конца файла получаю: Ошибка сегментирования (core dumped). Использую...

Ошибка CS1586 При создании массива следует указать размер массива или инициализатор массива
Не понимаю в чём ошибка. Ошибка CS1586 При создании массива следует указать размер массива или инициализатор массива. using...

OutOfMemory при создании большого Bitmap
Всем привет! Пытаюсь создать Bitmap размером 5120 * 2600 точек, на что отладчик ругается, что мол нет памяти. Неужели это непосильная для...

17
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
28.12.2015, 05:50
Лучший ответ Сообщение было отмечено kuza84 как решение

Решение

можно так
C++
1
int *m = new int[999999];
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
28.12.2015, 06:43
kuza84, создаешь массив из 519999 интов в стеке. Может переполнение стека (stack overflow)?

Добавлено через 10 минут
Размер инта в 32-битной Винде 4 байта, в 64-битной - 8 байт.

Для 32-битной винды:
4 * 519999 = 2079996 байт = 2031,2 Kb, то есть, чуть менее 2 Mb.
Для 64-битной винды:
8 * 519999 = 4159992 байт = 4062,5 Kb, то есть, чуть менее 4 Mb.

Студия, например, выделяет под стек всего лишь 1 Mb. Скорее всего, переполнение стека.

Добавлено через 59 секунд
kuza84, попробуй в куче (heap) свой массив создавать, как Apostol584 предложил.
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2015, 08:14
Цитата Сообщение от gru74ik Посмотреть сообщение
Размер инта в 32-битной Винде 4 байта, в 64-битной - 8 бит.
чего?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
28.12.2015, 08:19
Цитата Сообщение от Kastaneda Посмотреть сообщение
чего?
Ошибся. Байт, конечно же.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
28.12.2015, 09:14
Цитата Сообщение от gru74ik Посмотреть сообщение
Размер инта в 32-битной Винде 4 байта, в 64-битной - 8 байт.
Размер зависит не только от платформы, но и от компилятора. У меня, например, MinGW ну никак не хочет выделять под int 64 бита, а под size_t выделяет.
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2015, 09:36
Цитата Сообщение от gru74ik Посмотреть сообщение
Байт, конечно же.
А на 64 битной винде int реально 8 байт? Я просто не в курсе.

Добавлено через 54 секунды
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
а под size_t выделяет.
size_t обязан охватывать все адресное пространство, согласно стандарту. Поэтому на 64 битной ОС он будет 64 бита.
0
4 / 4 / 6
Регистрация: 14.10.2015
Сообщений: 26
28.12.2015, 14:51
Лучший ответ Сообщение было отмечено kuza84 как решение

Решение

Используй динамику
C++
1
2
3
4
5
6
7
8
9
int width;
cout << "Enter width: ";
cin >> width;
double *array = (int *)malloc(width*sizeof(int));
cout << endl;
for(int i = 0; i < width; i++)
{
  cout << array[i] << " ";
}
Или
C++
1
2
3
4
5
6
7
8
9
int width;
cout << "Enter width: ";
cin >> width;
double *array = new int[width];
cout << endl;
for(int i = 0; i < width; i++)
{
  cout << array[i] << " ";
}
1
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
29.12.2015, 18:31  [ТС]
оператор
C++
1
delete m;
обязательно писать если в конце программы вывод содержимого массива куда либо?

Добавлено через 8 минут
если объявить так, то массив где объявлен в куче?
C++
1
2
3
4
#include <iostream>
using namespace std;
 
int m[999999];
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
29.12.2015, 18:39
Цитата Сообщение от kuza84 Посмотреть сообщение
если объявить так, то массив где объявлен в куче?
Скорее всего в BSS

Добавлено через 1 минуту
Цитата Сообщение от kuza84 Посмотреть сообщение
обязательно писать если в конце программы вывод содержимого массива куда либо?
пары
malloc/calloc/realloc - free
new - delete
new[] - delete[]
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
29.12.2015, 19:12  [ТС]
а если нужен массив из
C++
1
n
символов, которые в тип
C++
1
int
не помещается к примеру
C++
1
long long
, а сам массив из типов
C++
1
int
состоит как правильно написать.

Добавлено через 14 минут
это правильно написано?
C++
1
2
long long s=9999999999;
int *m = new int[s];
Добавлено через 5 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Скорее всего в BSS
поясните поподробней
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
30.12.2015, 04:25
Цитата Сообщение от kuza84 Посмотреть сообщение
это правильно написано?

C++
1
2
long long s=9999999999;
int *m = new int[s];
Это сработает, за исключением ограничения на выделение памяти(Win32 - 2гб).Вы пытаетесь выделить ~37.5гб.
int может хранить от -2 147 483 648 до 2 147 483 647 и это уже 8гб
2
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
30.12.2015, 14:58  [ТС]
Цитата Сообщение от Apostol584 Посмотреть сообщение
Это сработает, за исключением ограничения на выделение памяти(Win32 - 2гб).Вы пытаетесь выделить ~37.5гб.
int может хранить от -2 147 483 648 до 2 147 483 647 и это уже 8гб
не подумал об этом, зато компилятор радостно прописчал что long long это у меня long и он как int исчерпан.

Добавлено через 4 минуты
На практике большой массив делят на меленькие и перебирают с помощью указателей большие массивы данных?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
30.12.2015, 15:15
Цитата Сообщение от kuza84 Посмотреть сообщение
На практике большой массив делят на меленькие и перебирают с помощью указателей большие массивы данных?
На практике массив заменяется B-деревом с ручным управлением отгрузкой его частей на диск (B-дерево экономит обращения к диску). Если, конечно, у вас не стоит 37 гигабайт оперативки, при которых подобные шаманства становятся не актуальными.
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
30.12.2015, 17:52  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
На практике массив заменяется B-деревом с ручным управлением отгрузкой его частей на диск (B-дерево экономит обращения к диску). Если, конечно, у вас не стоит 37 гигабайт оперативки, при которых подобные шаманства становятся не актуальными.
а когда стоит искать другую структуру когда использования массива нерационально?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
30.12.2015, 18:07
Цитата Сообщение от kuza84 Посмотреть сообщение
а когда стоит искать другую структуру когда использования массива нерационально?
1) Нужно часто менять размер массива, причем размер идет на гигабайты. В этом случае операция изменения размера может заметно задуматься.
2) Нужно гонять поиск по массиву, причем массив значительно больше физической памяти. В этом случае классические алгоритмы поиска будут слишком часто дергать диск (для чтения одного байта, придется грузить с диска весь сектор на 512 байт).
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
31.12.2015, 01:13  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
2) Нужно гонять поиск по массиву, причем массив значительно больше физической памяти. В этом случае классические алгоритмы поиска будут слишком часто дергать диск (для чтения одного байта, придется грузить с диска весь сектор на 512 байт).
с точки зрения если размещать массив в куче то только в куче, а на диск тогда что писать?

Добавлено через 6 минут
B-дерево ?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
31.12.2015, 07:53
Цитата Сообщение от kuza84 Посмотреть сообщение
с точки зрения если размещать массив в куче то только в куче, а на диск тогда что писать?
А на диск у вас поедет своп. Если в системе есть шестнадцать физических (на планках памяти) гигабайт, а вы просите 37, ОС скорее всего 37 гигабайт даст, но 21 гигабайт потихоньку выпихнет на диск ("виртуальная память" называется). Надо же их куда-то деть, если честных 37 гигабайт в компьютере просто нет. А потом будет жонглировать данными, подгружая из свопа те части массива, которые вы сейчас читаете и выгружая в своп те, которые не читаете. Вот в процессе этих акробатических номеров диск и будет постоянно дергаться.

Ну а B-дерево строится именно в расчете на подобное жонглирование и с учетом некоторых его особенностей (чтение с диска де-факто идет только крупными кусками, да еще и на порядок медленнее чем из памяти).
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2015, 07:53
Помогаю со студенческими работами здесь

Ошибка при создании массива
задача такая, методом перебора найти первое простое десятизначное значение дробной части е (эпсилон). для простоты решил не вычислять...

Ошибка при создании массива
Не пойму в чем ошибка... Подскажите пожалуйста. void CreatMas(int *m) { int st,stlb; scanf(&quot;%d&quot;,&amp;st); ...

OutOfMemoryError при создании большого JDOM Document
Подскажите, пожалуйста, как можно избежать OutOfMemoryError при создании большого JDOM Document. Мне нужно создать XML-модель сайта (всех...

Ошибка при создании массива объектов
Здравствуйте, необходимо создать массив случайного количества объектов, при выполнении такого кода компилятор выдает ошибку: Line 6 -...

Ошибка при создании массива c QLabel
Здравстуйте,хочу огласить 16-лейбелов в класе главного окна,и определить их в конструкторе окна.Когда компилирую и запускаю -ошибка. .H ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru