Максимальный размер индекса для массива - PullRequest
1 голос
/ 11 октября 2009

Следующий код вызывает сбой моей программы. Я обнаружил, что проблема заключается в размере массива. Если я уменьшу размер до 320 * 320, он работает нормально. Имеет ли смысл, чтобы эта рана была ограничением? Если так, то что обходится? Я кодирую в Objective C для IPhone. Любая помощь будет оценена.

Спасибо!

 int life_matrix[320*350];
 x_size=320;
 y_size=350;
 for (int counter=0; counter < x_size; counter++)
 {
  for (int counter2=0;counter2 < (y_size); counter2++)
  {
   life_matrix[counter*(int)x_size+counter2] = rand()%2;
  }
 }

Ответы [ 2 ]

7 голосов
/ 11 октября 2009

Массив размещается в стеке и обычно размер стека ограничен. Если вам нужен большой массив, обычно лучше разместить его в куче.

3 голосов
/ 11 октября 2009

Совет leiz верен, вы действительно должны распределять его динамически, иначе вы рискуете столкнуться с ситуацией, если размер массива больше, чем доступная память в стеке.

Также неверна формула, которую вы используете для отображения двумерной сетки в одномерный массив. Вы должны умножаться на y_size вместо x_size.

life_matrix[counter*(int)y_size+counter2] = rand()%2;

или вы можете перевернуть жетоны

life_matrix[counter2*(int)x_size+counter] = rand()%2;

Другим подходом к решению этой проблемы будет использование его в качестве одномерного массива для инициализации:

for(int n = 0; n < x_size * y_size; ++n) {
    life_matrix[n] = rand()%2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...