2012-12-16 1 views
1

Можно создать дубликат:
How can I allocate a 2D array using double pointers?Что делать, если памяти недостаточно для запуска моей программы на C?

Я использовал VB 2012 Express, чтобы сделать программу лабиринта.

Он работает очень хорошо, даже когда я установил ROW*COLUMN в 499*499, (лабиринт представляет собой массив: unsigned char maze[ROW][COLUMN]).

Но однажды я попытался создать супергигантский лабиринт 999*999, а компилятор дал мне ошибку «переполнение стека».

Я знаю, что это значит, но есть ли способ назначить дополнительную память или даже использовать какое-то дисковое пространство для запуска моей программы?

+3

You» не из памяти. Ты просто из стека. – Mysticial

ответ

2

В стеке выделяется maze, а размер стека обычно ограничен 1-8 мегабайтами. Чтобы преодолеть это ограничение, выделите maze на кучу.

Для предложений о том, как это сделать, см How can I allocate a 2D array using double pointers? и Heap allocate a 2D array (not array of pointers)

+0

thx. так что я должен делать с объектом в классе? – user1907570

2

Вы можете динамически выделить свой массив (например, maze = new char[ROW*COLUMN]) или передать его на глобальном уровне (вне области видимости функции), как

#define ROW 999 
#define COLUMN 999 

unsigned char maze[ROW][COLUMN]; 

int main(void) 
{ 

} 
Смежные вопросы