2010-01-14 2 views
1

12 개의 톤 매트릭스를 생성하는 간단한 C 프로그램을 작성했습니다. 코드가 컴파일되었지만 'Bus Error'런타임 오류가 발생합니다. 디버거에 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

컴파일 할 수 또는 엑스 코드의 디버거를 사용하고 저희에게 알려해야 무엇 라인 코드에 크래시가있다; – Potatoswatter

+1

이 코드는 내게 기꺼이 준다. –

+0

와우, 나이에 K & R C를 보지 못했습니다 ... –

답변

12

mat() 서브 루틴의 내부 루프 조건에 오타가 있습니다.

내가 'l'(el)을 색인으로 사용하지 않는 이유입니다.

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

당신이 "L < (11)"를 의미 (엘)하지 "1 < 11"(한)

하나는 열한 때보 다 짧아, 그래서 바운드없이 L (엘) 인덱스 증가, 리드 인덱스가 너무 커지면 불법적 인 메모리 액세스가 발생합니다.

+1

+1. 'i, j, k'는 아마도 루프 인덱스를위한 더 나은 옵션 일 것입니다. –

3

코드의 바닥에서 약 10 라인에는 문이 :

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

가 그 -g와

{for(l=1;l<=11;l++) 
관련 문제