2010-01-14 4 views
1

J'écris un simple programme C pour créer une matrice de douze tons. Le code compile, mais je reçois une erreur d'exécution 'erreur de bus'. Dans le débogueur, il est indiqué EXC_BAD_ACCESS.erreur de bus dans le programme simple 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

compilez avec -g ou utiliser le débogueur de XCode, et laissez-nous savoir quelle ligne de code a l'accident, v). – Potatoswatter

+1

ce code me donne les willies. –

+0

Wow, je n'ai pas vu K & R C dans les âges ... –

Répondre

12

Il existe une faute de frappe dans la condition de boucle interne du sous-programme mat().

C'est pourquoi je n'aime pas 'l' (el) comme index.

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

que vous vouliez dire "l < 11" (el) pas "1 < 11" (un)

On est toujours moins de onze ans, de sorte que les l index (el) augmente sans limite, ce qui conduit à un accès mémoire illégal lorsque l'index devient trop grand.

+1

+1. 'i, j, k' est probablement une meilleure option pour les indices de boucle. –

3

Environ 10 lignes à partir du bas de votre code que vous avez la déclaration:

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

devrait-il être

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