-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 编写程序并让它工作。任何帮助表示赞赏!

谢谢!

编辑:分段错误已修复,但现在它不打印总和的实际字符....

4

2 回答 2

1

这是“&array 不创建指针数组”的另一种情况。

这是一个指针数组:

 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];

消除 &:

char sum = sumArrays(&arr1, &arr2, 长度, 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];

并摆脱free(arr1); free(arr2)底部。在数组变得非常大之前无需分配数组,几百个整数就可以了。

于 2013-01-24T00:19:28.693 回答
0

在这一行:

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

您以错误的顺序取消引用二级指针。正确的一个是:

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

但真正的答案是:您不需要获取arr1. 将 sumArrays 声明更改为:

char sumArrays(int arr1[], int arr2[], int length, int count)
于 2013-01-24T00:18:33.117 回答