回答
我假設你正在使用C99編譯器(支持動態大小的數組)。你的代碼中的問題是,當編譯器看到你的變量聲明時,它不知道數組中有多少元素(我在這裏也假定,從編譯器錯誤length
不是編譯時間常量)。
您必須手動初始化數組:
int boardAux[length][length];
memset(boardAux, 0, length*length*sizeof(int));
你不能這樣做。 C編譯器不能在堆棧上做這麼複雜的事情。
您必須使用堆和動態分配。
你真的需要做什麼:
- 計算大小(N米的sizeof(元素))內存的需要
- 調用malloc(大小)來分配內存
- 創建訪問者:int * access(ptr,x,y,rowSize){return ptr + y * rowSize + x; }
使用* access(boardAux,x,y,size)= 42與矩陣進行交互。
還有一個問題,爲什麼我會收到一個錯誤無效使用數組與未指定的界限?012fprintf(「%d」,board [i] [j]); – helloWorld 2010-06-21 08:00:51
-1 C99允許在堆棧中作爲用戶代碼進行動態分配(不包括初始化)。沒有必要執行動態分配。 – 2010-06-21 08:02:15
@helloWorld因爲數組維必須被知道。 – 2010-06-21 08:55:39
您收到此錯誤,因爲在C語言中你不能使用帶有變長數組初始化。你得到的錯誤信息基本上說明了一切。
6.7.8 Initialization
...
3 The type of the entity to be initialized shall be an array of unknown size or an object type that is not a variable length array type.
你在哪裏找到這個,你能給我一個鏈接嗎? – helloWorld 2010-06-21 08:11:42
@helloWorld:這是來自語言標準(C99)。你可以在這裏獲得TC3更新的「工作」副本http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf – AnT 2010-06-21 08:13:10
有些主題,如果你有一些人總是不相信你只提供非正式的解釋。可變長度數組是其中的一個主題。 +1用於引用標準。 – 2010-06-21 08:30:25
這給了錯誤:
int len;
scanf("%d",&len);
char str[len]="";
這也給了錯誤:
int len=5;
char str[len]="";
但是這工作得很好:
int len=5;
char str[len]; //so the problem lies with assignment not declaration
你需要把值以下方式:
str[0]='a';
str[1]='b'; //like that; and not like str="ab";
聲明陣列
int boardAux[length][length];
分配初始值爲零的最簡單的方法後正在使用for循環,即使它可能有點冗長
int i, j;
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
boardAux[i][j] = 0;
}
對於C++單獨聲明和初始化像t他的..
int a[n][m] ;
a[n][m]= {0};
- 1. 可變大小的對象可能未初始化 - C錯誤
- 2. 錯誤:可變大小的對象可能未被初始化?
- 3. 變量大小的對象可能未被初始化,錯誤
- 4. 代碼:Blocks Mingw編譯器錯誤:可變大小的對象可能未初始化
- 5. 無法編譯Java錯誤變量可能未被初始化
- 6. 編譯錯誤:變量可能未被初始化
- 7. 可變大小的對象可能不被初始化
- 8. 可變大小的對象數組可能無法初始化
- 9. 錯誤變量可能未初始化
- 10. 編譯錯誤變量未初始化
- 11. GCC編譯器錯誤,'p_data'可能未初始化使用
- 12. 分段故障/可變大小的對象可能不被初始化錯誤C
- 13. 錯誤:變量c可能尚未初始化
- 14. GCC抱怨:可變大小的對象可能不被初始化
- 15. 可變SC可能尚未初始化
- 16. 爲什麼「變量可能未被初始化」阻止編譯?
- 17. 初始化具有可變大小的
- 18. 錯誤:變量(Date對象)可能當我編譯這段代碼,我得到尚未初始化
- 19. 初始化一個對象時發生C++編譯錯誤
- 20. 錯誤:可能不會初始化可變大小的對象。不確定爲什麼?
- 21. 文件數組初始化錯誤:變量可能未初始化
- 22. Java中的變量可能未被初始化錯誤
- 23. 如何解決變量可能未被初始化的錯誤
- 24. 對象變量可能尚未初始化
- 25. 變量可能尚未初始化錯誤
- 26. 「本地變量」名稱「可能未被初始化」錯誤
- 27. 變量可能未被初始化錯誤
- 28. 錯誤:變量可能未被初始化
- 29. 變量可能未初始化錯誤和一般建議
- 30. 錯誤:變量digitMonth可能未被初始化
我也可以用於這個目的malloc,那麼第二個問題呢,我在Pavel的回覆後寫了它 – helloWorld 2010-06-21 08:10:28
@helloWorld:使用堆棧分配數組,'printf(「%d」,boardAux [1] [2])'編譯精細。編譯器知道尺寸並知道內存中第(1,2)個元素的位置。如果使用動態分配,數組是單維的,並且您必須自己執行數學運算:'printf(「%d」,boardAux [1 * length + 2])' – 2010-06-21 08:39:12
@AndreyT:感謝將錯誤指向'memset '喊出來。我剛剛糾正了它。 – 2010-06-21 08:39:45