2013-01-24 169 views
-2

我正在收到分段錯誤錯誤。 誰能告訴我爲什麼?分段錯誤錯誤

 #include <stdio.h> 
     #include <stdlib.h> 

     char sumArrays(int * arr1[], int * arr2[], int length, int count){ 
     if(count == length){ 
      return ' '; 
     } 
     else{ 
      int sum = 0; 
     sum = *arr1[count] + *arr2[count]; 
     char ch = '    
     ch = ch + (char)sum; 
     return ch + sumArrays(arr1, arr2, length, count+1); 
    } 
    } 

int main(int argc, char * arr[]){ 
    int length = 6; 
    printf("Enter the first row of 6 integers:"); 
    int * arr1 = malloc(length * sizeof(int)); 
    int * arr2 = malloc(length * sizeof(int)); 
    int counter = 0; 
    int number = 0; 
    while(counter < length){ 
     scanf("%d", &number); 
     arr1[counter]=number; 
     counter++; 
    } 
    counter = 0; 
    printf("Enter the second row of 6 integers:"); 
    while(counter < length){ 
     scanf("%d", &number); 
     arr2[counter] = number; 
     counter++; 
    } 
    char sum = sumArrays(&arr1, &arr2, length, 1); 
    free(arr1); 
    free(arr2); 
    printf("Their sums are : %c ", sum); 
    return 0; 
    }  

我是C新手,對語言不太瞭解。我是 能夠用Java編寫程序並使其工作。 任何幫助表示讚賞!

謝謝!

編輯: 分割錯誤是固定的,但現在它不打印的款項的實際焦炭....

+2

調試器在哪裏說故障發生? –

+0

它沒有。它發生在我爲每個數組輸入6個整數之後。 – ola

+0

輸入6個整數的第一行:1 2 3 4 5 6 輸入6個整數的第二行:1 2 3 4 5 6 分段錯誤(核心轉儲) 這是終端中的內容。我很抱歉,我很新的編碼在C和使用Linux,所以我不知道如何使用調試器一般.... – ola

回答

0

在這一行:

sum = *arr1[count] + *arr2[count]; 

你提領二級指針在錯誤的順序。正確的應該是:

sum = (*arr1)[count] + (*arr2)[count]; 

但真正的答案是:你不需要採取arr1地址。更改sumArrays聲明:

char sumArrays(int arr1[], int arr2[], int length, int count) 
+0

這工作時發生!謝謝你,我仍然在學習一切,所以我還是當使用指針有點困惑,當不使用指針 – ola

+0

唯一沒有現在的工作是不實際打印的實際金額....嗯 – ola

1

這是「&陣列不會使指針數組」另一種情況。

這是一個指針數組:

int * arr1[] 

這使得一個指針到一個整數數組;

&arr1  // That is, one pointer to your array of integers. 

因此,當您訪問count> 0時,編譯器會嘗試讀取您沒有給出的指針值。

*arr1[count] 

的解決辦法是在這裏和那裏刪除星和&在其他地方:

刪除*

char sumArrays(int * arr1[], int * arr2[], int length, int count){ 
    sum = *arr1[count] + *arr2[count]; 

刪除&:

焦炭總和= sumArrays(& arr1,& arr2,length,1);

我個人也將改變這一點:

int length = 6; 
int * arr1 = malloc(length * sizeof(int)); 
int * arr2 = malloc(length * sizeof(int)); 

到:

const int length = 6; 
int arr1[length]; 
int arr2[length]; 

,擺脫FO的free(arr1); free(arr2)在bottm。沒有必要分配數組,直到它們變得很大,幾百個整數就完全沒問題。

+0

原因我分配是因爲在問題的方面,我應該能夠將長度改變爲最多1000個整數。將嘗試修復並取回,謝謝 – ola

+0

所以,使其成爲1000固定的大小,並用長度來確定有多少實際使用...;) 記住,在堆棧上分配一個指令使空間(在stackpointer減法),使使用malloc空間是一個函數調用一個相當複雜的功能,並免費心不是好得多)。 –