Objective c 创建一个int数组,其大小基于NSArray的大小

Objective c 创建一个int数组,其大小基于NSArray的大小,objective-c,c,pointers,dynamic-arrays,Objective C,C,Pointers,Dynamic Arrays,我试图根据运行时得到的大小创建一个ints数组并将其归零: size = [gamePiece.availableMoves.moves count]; //debugger shows size = 1; int array[size]; //debugger shows this as int[0] ! memset(array, 0, size); indexes = array; 大小和索引都是此类IVAR: int size; int* indexes; 不过,我最终得到了一个长度

我试图根据运行时得到的大小创建一个
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;
大小
索引
都是此类IVAR:

int size;
int* indexes;

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

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

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

现在,您通常可以通过索引操作符
[]

访问元素。首先,您不能执行您正在执行的操作。即使这样,当方法返回并且当前堆栈帧被删除时,数组也将消失。您需要动态分配数组,然后需要记住在解除分配对象时释放它。因此:

size = [gamePiece.availableMoves.moves count];
indexes = calloc(size, sizeof(int));
然后,在您的
-[dealoc]
方法中:

if( indexes ) free(indexes);

使用calloc(3)将确保所有内存都归零,因此不需要调用memset(3)。

在调用free()之前,通常不需要检查NULL值;我不知道有哪一个free()实现不是空安全的。我是C语言的新手,但是Mahesh的答案有用吗?他用malloc?它与calloc相同吗?@Mazyod-否,calloc确保返回的每个内存位置都设置为NULL,而malloc在带有C99的gcc中没有可变长度数组,这是Xcode中的默认值。只是调试器无法显示长度。但这并不意味着数组的大小不正确。然而,它的问题将是在堆栈上。“Firas-LaFele-他的问题不是可变长度数组,而是不能将它分配给IVAR,这是他根据问题而得到的。可变长度数组是有效的C99,但不是C++(虽然有些编译器支持它),这可能是为什么代码> int数组[大小]的一个原因。测试时,它不起作用。另一个潜在原因是调试器无法处理可变长度数组。这并不是说上述方法可以在C99下工作,因为其他人已经指出,即
array
具有本地持续时间。另见:。