0

int我正在尝试根据我在运行时获得的大小创建一个 s 数组并将其归零:

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都是此类的 ivars:

int size;
int* indexes;

不过,我最终得到了一个长度为 0 的数组。如何使用 指示的大小创建它[gamePiece.availableMoves.moves count]

4

2 回答 2

6

首先,你不能做你正在做的事情。即使这样有效,当方法返回并且当前堆栈帧被删除时,数组也会消失。您需要动态分配数组,然后您需要记住在释放对象时释放它。所以:

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

然后,在您的-[dealloc]方法中:

if( indexes ) free(indexes);

使用 calloc(3) 将确保所有内存都清零,因此您无需调用 memset(3)。

于 2011-03-01T04:04:06.530 回答
2

数组大小应该是一个常量整数表达式。你需要使用malloc。

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

现在,您通常可以通过索引运算符访问元素[]

于 2011-03-01T04:00:47.463 回答