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

Maz*_*yod 0 c pointers objective-c dynamic-arrays

我正在尝试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;
Run Code Online (Sandbox Code Playgroud)

size并且indexes都是这个类的ivars:

int size;
int* indexes;
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*oco 6

首先,你无法做你正在做的事情.即使这样可行,当方法返回并删除当前堆栈帧时,数组也将消失.您需要动态分配数组,然后您需要记住在释放对象时释放它.所以:

size = [gamePiece.availableMoves.moves count];
indexes = calloc(size, sizeof(int));
Run Code Online (Sandbox Code Playgroud)

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

if( indexes ) free(indexes);
Run Code Online (Sandbox Code Playgroud)

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