2013-01-24 158 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空间是一个函数调用一个相当复杂的功能,并免费心不是好得多)。 –