我正在尝试根据运行时获得的大小创建并归零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
都是此类的ivars:
int size;
int* indexes;
但我最终得到了一个0长度的数组。如何使用[gamePiece.availableMoves.moves count]
指示的尺寸创建它?
答案 0 :(得分:6)
首先,你无法做你正在做的事情。即使这样可行,当方法返回并删除当前堆栈帧时,数组也将消失。您需要动态分配数组,然后您需要记住在释放对象时释放它。所以:
size = [gamePiece.availableMoves.moves count];
indexes = calloc(size, sizeof(int));
然后,在您的-[dealloc]
方法中:
if( indexes ) free(indexes);
使用calloc(3)将确保所有内存都清零,因此您无需调用memset(3)。
答案 1 :(得分:2)
数组大小应该是一个常量整数表达式。你需要使用malloc。
int *array = malloc( sizeof(int) * size ) ;
现在,您通常可以通过索引运算符[]
访问元素。