Создание массива целых, размер которых основан на размере NSArray - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь создать и обнулить массив int с на основе размера, который я получаю во время выполнения:

size = [gamePiece.availableMoves.moves count]; //debugger shows size = 1;
int array[size]; //debugger shows this as int[0] !
memset(array, 0, size);
indexes = array;

size и indexes являются иварами этого класса:

int size;
int* indexes;

Я получаю массив 0 длины. Как я могу создать его с размером, указанным [gamePiece.availableMoves.moves count]?

Ответы [ 2 ]

6 голосов
/ 01 марта 2011

Прежде всего, вы не можете делать то, что делаете.Даже когда это работает, массив исчезнет, ​​когда метод вернется и текущий кадр стека будет удален.Вам нужно динамически распределить массив, затем вам нужно помнить, чтобы освободить его, когда ваш объект освобожден.Итак:

size = [gamePiece.availableMoves.moves count];
indexes = calloc(size, sizeof(int));

Затем в вашем -[dealloc] методе:

if( indexes ) free(indexes);

Использование calloc (3) обеспечит обнуление всей памяти, поэтому вам не нужнодля вызова memset (3).

2 голосов
/ 01 марта 2011

Размер массива должен быть постоянным интегральным выражением. Вам нужно использовать malloc.

int *array = malloc( sizeof(int) * size ) ;

Теперь вы обычно можете получить доступ к элементам с помощью оператора индекса [].

...