Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2015, 17:50   #1
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
Сообщение Как объявить классовый массив, с большим числом?

Есть класс SPACE_CELL это класс ячеек в которых должно быть 64х64х16 штук, т.е. 65536 всего.
Когда я пишу:

Код:

	const int Space_cell_x_max = 64;//Пространство по х
	int Space_cell_x = 0;

	const int Space_cell_y_max = 64;//пространство по y
	int Space_cell_y = 0;

	const int Space_cell_z_max = 16;//пространство по z
	int Space_cell_z = 0;

	class SPACE_CELL {
		public:
			int Space_cell_koordinat_x;
			int Space_cell_koordinat_y;
			int Space_cell_koordinat_z;
			int Space_cell_namber;
			int Space_cell_Star;
	};

	const long Space_cell_max = Space_cell_x_max * Space_cell_y_max * Space_cell_z_max;//Максимальное количество ячеек


	SPACE_CELL Space_cell_nomer[Space_cell_max];
То компилятор выдает:
Цитата:
Необработанное исключение в "0x01343067" в "test2.exe": 0xC00000FD: Stack overflow.
Думаю что это из за того что в классе SPACE_CELL создается слишком большой массив, в который не может залезть 65536 количество ячеек.

Мне предлагали использовать "new" но я не знаю как присвоить классу SPACE_CELL массив Space_cell_nomer[65536] через new.

В дальнейшем класс SPACE_CELL будет перечисляться в цикле и через цикл присваиваться значения

Код:
					Space_cell_nomer[nomer_cell].Space_cell_namber = nomer_cell;//Записывает номер ячейки
					Space_cell_nomer[nomer_cell].Space_cell_koordinat_x = x;//Записывает координату х
					Space_cell_nomer[nomer_cell].Space_cell_koordinat_y = y;//Записывает координату у
					Space_cell_nomer[nomer_cell].Space_cell_koordinat_z = z;//Записывает координату z
					Space_cell_nomer[nomer_cell].Space_cell_Star = END_type_cell;//тип ячейки
Помогите
ученик самоучка
koker_007 вне форума Ответить с цитированием
Старый 30.03.2015, 18:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
я не знаю как присвоить классу SPACE_CELL массив Space_cell_nomer[65536] через new.
Код:
SPACE_CELL *Space_cell_nomer= new SPACE_CELL[Space_cell_max];
Если не ошибаюсь. Ну и потом каждый элемент нужно будет создавать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2015, 14:26   #3
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
SPACE_CELL *Space_cell_nomer= new SPACE_CELL[Space_cell_max];
Если не ошибаюсь. Ну и потом каждый элемент нужно будет создавать.
Теперь, компилятор ошибки не выдает, но программа работает не правильно.

Думаю что проблема в логике.
Не закрывайте пожалуйста тему, пока что не разобрался, но как разберусь отпишусь что все работает.
ученик самоучка
koker_007 вне форума Ответить с цитированием
Старый 31.03.2015, 14:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Договорились.
ИМХО я бы STL использовал для таких целей. Скажем List<SPACE_CELL>
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2015, 19:03   #5
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
По умолчанию

Теперь компилятор выдает.

Цитата:
Необработанное исключение в "0x00ce187a" в "test2.exe": 0xC0000005: Нарушение прав доступа при записи "0x00421000".
Раньше не выдавал из-за того что я его просил выводить строки через цикл с координатами и действия он выполнял долго, до конца программы не дожидался. Теперь когда не прошу, он все действия выполняет быстро и сразу.
Видимо он достигает опять какого-то предела.
Предел думаю скорее всего опять из-за класса SPACE_CELL.
Так что проблема не решена.

А почему лучше STL использовать?
ученик самоучка

Последний раз редактировалось koker_007; 31.03.2015 в 19:38.
koker_007 вне форума Ответить с цитированием
Старый 31.03.2015, 19:34   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А почему лучше STL использовать?
Ну кому как... Мне удобнее. Я например не переживаю за неправильную работу с указателями. Даже не знаю как обьяснить... Разницу между средневековой повозкой и современным рейсовым автобусом знаешь? Вот и тут так же. Комфорт.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2015, 19:42   #7
koker_007
Пользователь
 
Аватар для koker_007
 
Регистрация: 30.03.2015
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну кому как... Мне удобнее. Я например не переживаю за неправильную работу с указателями. Даже не знаю как обьяснить... Разницу между средневековой повозкой и современным рейсовым автобусом знаешь? Вот и тут так же. Комфорт.
Понял, значит буду учить дальше. Спасибо.
ученик самоучка
koker_007 вне форума Ответить с цитированием
Старый 31.03.2015, 19:46   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да не за что )
Удачи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процесс компиляции. Как объявить массив. Digitext Помощь студентам 4 24.12.2013 14:57
Объявить файл *.txt как массив nnm2009 Общие вопросы Delphi 4 28.05.2013 13:06
Как объявить инициализировать глобальный массив Point в clr? scripto Visual C++ 0 07.04.2011 22:12
Как работать с большим числом? phobos Общие вопросы C/C++ 2 21.04.2009 07:05
как в процедуре объявить массив? kolduev Помощь студентам 7 18.02.2008 23:35