2010-01-14 35 views
1

我正在寫一個簡單的C程序來創建一個十二音調矩陣。代碼編譯,但我得到運行時錯誤'總線錯誤'。 在調試器中它說EXC_BAD_ACCESS簡單的Mac OSX C程序中的總線錯誤

int main() 
{ 
    int j,k,l; 
    int twelve[13][13]; 
    void mat(int twelve[13][13]); 
    printf("input original tone row \n"); 
    for(j=0;j<=11;j++) 
    { 
     scanf("%2i",&twelve[j][0]); 
    } 
    mat(twelve); 

    for(k=0;k<=11;k++) 
    { 
     for(l=0;l<=11;l++) 
     { 
      printf("%i ",twelve[l][k]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

void mat(twelve) 
    int twelve[13][13]; 
{ 
    int j,k,l; 
    int temp; 
    /*inversion*/ 
    for(j=1;j<=11;j++) 
    { 
     twelve[0][j] = 12 - twelve[j][0]; 
    } 
    /*fill in columns*/ 
    /*this sections seems to be what's crashing it */ 
    for(k=1;k<=11;k++) 
    { 
     for(l=1;1<=11;l++) 
     { 
      temp = twelve[0][k] + twelve[l][0]; 
      if(temp >= 12) 
      { 
       twelve[k][l] = temp - 12; 
      } 
      else 
      { 
       twelve[k][l] = temp; 
      } 
     } 
    } 
} 
+0

編譯-g或使用Xcode的調試器,並讓我們知道什麼線的代碼有崩潰; v)。 – Potatoswatter 2010-01-14 00:46:24

+1

這段代碼給了我意志。 – 2010-01-14 00:46:50

+0

哇,我從未見過K&R C的年齡... – 2010-01-14 01:13:09

回答

12

mat()子程序的內部循環條件中存在拼寫錯誤。

這就是爲什麼我不喜歡'l'(el)作爲索引。

for(l=1;1<=11;l++) 

你的意思是 「L < 11」(EL)不是 「1 < 11」(一)

一個人總十一點較少,所以L(EL)指數增長沒有約束,這導致索引變得太大時導致非法內存訪問。

+1

+1。 'i,j,k'可能是循環索引的更好選擇。 – 2010-01-14 00:48:14

3

從代碼底部約10行了你就必須聲明:

{for(l=1;1<=11;l++) 

應該說是

{for(l=1;l<=11;l++)