2014-09-27 82 views
-2

我這裏爲什麼這個函數使數組更改另一個變量?

char ** makeArray(int count) 
{ 
     char **array[count]; 
     return array[count]; 
} 

一個函數,在令牌的數量需要從陣列然後返回具有正確大小的陣列。 但由於某些原因,它正在改變計數。

在我的主要功能我用的功能,此代碼:

char **dictionary; 
dictionary = makeArray(count); 

計數的使用功能前值是10,和我使用後的功能計數的值變爲6

+1

必須有更多的在你的代碼比。請創建可能的最小程序來顯示此錯誤併發布,以便我們可以有更多的上下文。 – Carl 2014-09-27 16:27:03

+1

你的函數不返回數組 - 這是不可能的。它返回一個指向局部變量的指針。該函數返回後,該局部變量即已死亡。因此你有未定義的行爲。你需要使用'malloc'(或者這樣)並記住清理。 – Mat 2014-09-27 16:28:18

回答

0

我不知道你使用的是什麼c編譯器,但是這些代碼不能用VC++編譯。如果你想在編譯時聲明一個數組,你的「count」變量必須是一個編譯時間常量。

這個怎麼樣?

char ** makeArray(int count) 
{ 
    char** array = (char**)malloc(sizeof(char*)*count); 
    return array; 
} 

記住使用後丟棄的陣列,也將導致內存泄漏

free(array); 
+1

你的修復是正確的(除了你不應該投射malloc的返回值),但VC++的代碼編譯失敗是因爲它不支持引入VLA的C99(有問題的代碼使用)。 – Mat 2014-09-28 08:33:17

+0

感謝您的信息。是的,我注意到Clang Objective C編譯器允許在運行時指定數組的大小。 – seggaeman 2014-09-28 10:03:47

相關問題