2011-03-01 74 views
0

我試圖創建和零的基礎上大小int s表示我在運行時得到一個數組的大小:創建的int數組,其大小是基於一個NSArray

size = [gamePiece.availableMoves.moves count]; //debugger shows size = 1; 
int array[size]; //debugger shows this as int[0] ! 
memset(array, 0, size); 
indexes = array; 

sizeindexes是這個類的實例變量二者:

int size; 
int* indexes; 

我結束了一個長度爲0的數組,雖然。我如何使用[gamePiece.availableMoves.moves count]指定的尺寸創建它?

+0

可變長度數組是有效的C99,但不是C++(儘管一些編譯器支持它),這可能是您測試它時「int array [size]」不起作用的一個原因。另一個潛在的原因是調試器無法處理可變長度的數組。並不是說上述內容可以在C99下工作,因爲其他人已經指出,即'array'具有本地持續時間。另請參見:[C/C++:在運行時的數組大小不允許動態分配?](http://stackoverflow.com/questions/737240/cc-array-size-at-run-time-wo-dynamic -allocation-是允許的)。 – outis 2011-03-01 04:34:43

回答

6

首先,你不能做你在做什麼。即使這樣做,數組將在方法返回並且當前堆棧框架被移除時消失。您需要動態分配數組,然後您需要記住在釋放對象時釋放它。所以:

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

然後,在你-[dealloc]方法:

if(indexes) free(indexes); 

使用釋放calloc(3)將確保所有內存都被清零,所以你不需要調用memset的(3) 。

+0

在調用free()之前,通常不需要檢查NULL的值;我不知道一個不是NULL的單個free()實現。 – vanza 2011-03-01 04:07:40

+0

對C來說是新手,但Mahesh的答案是否奏效?他使用malloc?它和calloc一樣嗎? – Mazyod 2011-03-01 04:09:36

+0

@Mazyod - 不,calloc確保返回的每個內存位置設置爲NULL,而malloc不是 – Mahesh 2011-03-01 04:10:57

2

數組大小應該是一個常數積分表達式。你需要使用malloc。

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

現在,您可以通過索引運算符[]正常訪問元素。

+0

當我完成「數組」時,如何釋放這些內存? – Mazyod 2011-03-01 04:01:30

+0

只是說 - '自由陣列;' – Mahesh 2011-03-01 04:03:45

+0

優秀,正是我需要的......非常感謝。 – Mazyod 2011-03-01 04:07:21

相關問題