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、両方ともこのクラスの ivar です。

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 ) ;

これで、通常は index operator で要素にアクセスできます[]

于 2011-03-01T04:00:47.463 に答える