2016-03-13 52 views
0

所以這個函數只是在數組之間進行交換。 r是陣列il是索引改變的長度。它給了我一個錯誤EXC_BAD_ACCESS(Code=1)數組參數指針錯誤?

void swap(int a[], int first, int second, int r) { 
    int tempp = a[first]; 
    a[first] = a[second]; 
    a[second] = tempp; 
} 

該函數生成數組的排列。

void permute(int a[], int l, int r) { 
    int temp[r]; 

    int i; 
    if (l == r) 
     for (int k = 0; k < r; k++) { 
      printf("%d\n", a[k]); 
     } 
    else { 
     for (i = l; i <= r; i++) { 
      swap(a[r], l, i, r); 
      permute(a[r], l + 1, r); 
      swap(a[r], l, i, r); 
     } 
    } 
} 

所以函數接受來自main的輸入,並根據一些要求製作一個數組。

void perm_rec_1(int N, int nr_vals) { 
    int a[N], temp = nr_vals - 1; 
    int output[N]; 

    for (int i = 0; i < N; i++) { 
     if (i >= nr_vals) { 
      a[i] = temp; 
      continue; 
     } else { 
      a[i] = i; 
     } 
    } 
    int i; 
    for (int i = 0; i < N; i++) { 
     printf("%d", a[i]); 
    } 

    permute(a[N], 0, (nr_vals) - 1); 
} 
+0

@ M.M哪裏是OID? – Neyka

+0

'互換(A [R]'應該給編譯器的消息。'一[R]'是一個'int',但該函數的第一個參數是'INT []'。注意一下編譯器說你代碼,並修復在消息中提到任何東西。 –

+0

@MM那空隙只是忘的來信。 – Neyka

回答

0

通過不同類型的錯誤代碼的工作,下面的編譯和運行:

void swap(int a[], int first, int second) { 
    int temporary = a[first]; 
    a[first] = a[second]; 
    a[second] = temporary; 
} 

void permute(int a[], int l, int r) { 
    if (l == r) { 
     for (int k = 0; k < r; k++) { 
      printf("%d\n", a[k]); 
     } 
    } else { 
     for (int i = l; i <= r; i++) { 
      swap(a, l, i); 
      permute(a, l + 1, r); 
      swap(a, l, i); 
     } 
    } 
} 

void perm_rec_1(int N, int nr_vals) { 
    int a[N], temp = nr_vals - 1; 

    for (int i = 0; i < N; i++) { 
     if (i >= nr_vals) { 
      a[i] = temp; 
     } else { 
      a[i] = i; 
     } 
    } 

    for (int i = 0; i < N; i++) { 
     printf("%d", a[i]); 
    } 

    permute(a, 0, (nr_vals) - 1); 
} 

雖然我不能說,它的任何超出swap()作品我不能確定那是什麼試圖去做。