2016-11-30 42 views
1
int main(int argc, char* arv[]) 
{ 

    int m; 
    printf("How many Rows and Lines?:\n"); 
    scanf("%d", &m); 
    char board[m][m] ; 
    int rows, columns; 
    for(rows = 0; rows < m; rows++) 
    { 
     for(columns = 0; columns < m; columns++) 
     { 
      char *board = malloc(rows*columns*sizeof(int)); 
     } 
    } 
    for(rows = 0; rows < m; rows++) 
    { 
     for(columns = 0; columns < m; columns++) 
     { 
      printf("%c", board[rows][columns]); 
     } 
     printf("\n"); 
    } 
} 

的問題是,我evreytime得到錯誤的輸出:/ 如果有人能幫助我,這是不錯的,我是新的編程ç二維數組輸入工作,但輸出給其他的東西了

+1

在第一個嵌套循環中,您試圖用'char * board = malloc(rows * columns * sizeof(int));''多次分配內存到同一個變量。無論如何,這是徒勞的,因爲'board'已經被定義爲一個數組,並且在循環之後,相同名字的塊範圍'char * board'變爲無效。 –

+0

除了答案中提到的陰影(和內存泄漏)之外,你還期望輸出什麼?你從不將任何值賦給'board',輸出將成爲垃圾數據。調用任何'scanf()'函數系列時,'malloc'不會將內存初始化爲任何特定值 – yano

+0

,請始終檢查返回值(不是參數值)以確保操作成功。 – user3629249

回答

2

你只想初始化數組嗎?它已經在循環外部創建,並且不需要再次分配內存。這:

for(rows = 0; rows < m; rows++) 
{ 
    for(columns = 0; columns < m; columns++) 
    { 
     board [rows][columns]='a'; 
    } 
} 

代替第一嵌套循環要把這作爲結果:

How many Rows and Lines?: 
5 
aaaaa 
aaaaa 
aaaaa 
aaaaa 
aaaaa 
1

的第一個循環內的board的範圍僅限於該循環。你不修改你在函數開頭聲明的數組。

你想在陣列中放什麼?

0

隨着人們說,你board內循環是完全無關的外面的一個,所以任何變化進行就不會被反映出來。從這個原因可以看出,每次你得到不同的東西時,都是因爲實際的board沒有被初始化,並且可以採用偶然的值。