2010-01-14 64 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++)